Python爬虫教程003:请求对象的定制、get请求的quote和urlencode方法

news/2025/4/1 21:34:47/

2.4 请求对象的定制

在 Python 爬虫中,User-Agent(UA)反爬是指网站通过检测请求头中的 User-Agent 来识别并屏蔽爬虫。许多网站会检查 UA 是否是常见的爬虫(如 Python-urllib 或 Scrapy),并拒绝非浏览器的访问。因此,我们需要使用 伪装 UA、随机 UA 甚至 UA 池 来绕过这种反爬机制。

python"># -*- coding: utf-8 -*-
# @Time: 2022/9/25 0025 11:32
# @Author: Wang
# @File: 04_urllib_请求对象的控制.pyimport urllib.requesturl = 'https://www.baidu.com'headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}# 因为urlopen方法中不能存储字典 所以headers不能传递出去# url的组成
# http/https   www.baidu.com   80/443   s   wd=周杰伦
#    协议            主机        端口号   路径    参数
# http   80
# https   443
# mysql   3306# 因为参数顺序的问题 不能直接写url 和 headers
request = urllib.request.Request(url=url, headers=headers)response = urllib.request.urlopen(request)content = response.read().decode('utf-8')print(content)

解释:

  • User-Agent 模拟真实浏览器,避免服务器识别 Python 爬虫
  • 这里的 UA 来自 Chrome,可在 UA 生成器 获取最新 UA。

2.5 编解码

直接访问https://www.baidu.com/s?wd=杜兰特会报错,无法识别汉字,所以需要通过quote把汉字转换为能识别的编码

示例:

python"># -*- coding: utf-8 -*-
# @Time: 2022/9/25 0025 11:50
# @Author: Wang
# @File: 05_urllib_get请求的quote方法.pyimport urllib.request
import urllib.parse# url = 'https://www.baidu.com/s?wd=%E6%9D%9C%E5%85%B0%E7%89%B9'# 获取https://www.baidu.com/s?wd=周杰伦的网页源码url = 'https://www.baidu.com/s?wd='# 请求对象的定制 是为了解决反爬的第一种手段
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}# 将周杰伦三个字变成unicode编码的格式
# 我们需要依赖于urllib.parse
name = urllib.parse.quote('周杰伦')
print(name)  # %E6%9D%9C%E5%85%B0%E7%89%B9# 请求对象的定制
request = urllib.request.Request(url=url+name, headers=headers)# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)# 获取响应的内容
content = response.read().decode('utf-8')print(content)

结果:

image-20250327132629403

2.6 urlencode

在 Python 爬虫中,urlencode 主要用于对 URL 参数进行编码,以确保它们可以安全地传输。它通常用于 requestsurllib 处理 GET 请求时的 URL 参数构造。

示例1:

python">import urllib.parsedata = {'wd': '周杰伦','sex': '男'
}a = urllib.parse.urlencode(data)print(a)  

打印结果:可以将字典转换为 URL 编码的查询字符串。

wd=%E5%91%A8%E6%9D%B0%E4%BC%A6&sex=%E7%94%B7

示例2:

python"># -*- coding: utf-8 -*-
# @Time: 2022/9/27 0027 10:48
# @Author: Wang
# @File: 06_urllib_get请求的urlencode.py# https://www.baidu.com/s?wd=周杰伦&sex=男import urllib.request
import urllib.parsebase_url = 'https://www.baidu.com/s?'data = {'wd': '周杰伦','sex': '男','location': '中国台湾省'
}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}new_data = urllib.parse.urlencode(data)url = base_url + new_dataprint(url)  # https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6&sex=%E7%94%B7&location=%E4%B8%AD%E5%9B%BD%E5%8F%B0%E6%B9%BE%E7%9C%81request = urllib.request.Request(url=url, headers=headers)response = urllib.request.urlopen(request)content = response.read().decode('utf-8')print(content)

总结:

  • urlencode 适用于 URL 查询参数的编码,避免特殊字符影响请求。
  • 结合 requests 可用于动态构造 URL 请求。

http://www.ppmy.cn/news/1584344.html

相关文章

AI预测3D新模型百十个定位预测+胆码预测+杀和尾+杀和值2025年3月29日第37弹

(1)定位请参考图片中每个号码经过模型计算出来的出现概率~ (2)去掉1-2个尾:3和0,重点考虑3~ (3)三胆下1或下2,模型1推荐:012,模型2推荐:189~ (4)去掉6-8个和值:5、6、22、21、20、11&#xff0c…

智慧能源新篇章:SAP如何赋能光伏行业数字化转型

智慧能源新篇章:SAP如何赋能光伏行业数字化转型 在全球能源结构加速向清洁化、低碳化转型的今天,光伏行业作为可再生能源领域的核心赛道,正迎来前所未有的发展机遇。然而,随着市场规模扩大、技术迭代加速和竞争格局重塑&#xff0…

游戏引擎学习第184天

"我们有所有的代码"α 我们将进行一个完整的游戏开发过程,并且会展示。我们从零开始编写引擎,所以我们涵盖的内容从最底层的代码到最高层次的模块都有。虽然我们不能说是“高层次high level”的内容,但我们确实拥有所有的代码&…

累积分布策略思路

一种基于概率密度和累积分布函数的量化交易策略,主要应用于期货市场。该策略通过计算价格数据的概率密度和累积分布函数(CDF),结合移动平均线和ATR(平均真实范围)等技术指标,实现多空交易的自动…

SEO(搜索引擎优化)详解

SEO(搜索引擎优化)详解 SEO是Search Engine Optimization的缩写,中文称为"搜索引擎优化"。它是指通过一系列技术和方法,提高网站在搜索引擎自然(非付费)搜索结果中的排名,从而获得更…

上海SMT贴片技术解析与行业趋势

内容概要 随着长三角地区电子制造产业集群的快速发展,上海作为核心城市正引领着SMT贴片技术的革新浪潮。本文聚焦表面组装技术在高密度互连、微间距贴装等领域的突破性进展,通过解析焊膏印刷精度控制、元件定位算法优化等核心工艺,展现上海企…

5000元组装一台本地运行中、小模型主机,参考配置 (运行DeepSeek、Qwen)

5000元组装一台本地运行中、小模型主机,参考配置 (运行DeepSeek、Qwen) 5000元中、小模型主机 DeepSeek、Qwen 各精度模型推荐启动方式 模型名称 参数量 精度 模型大小 推荐运行模式 DeepSeek R1 7b Q4 5 GB LM Studio纯GPU 14b Q4 9 GB LM…

【C#.NET】VS2022创建Web API项目

C# Web API 是一种基于 .NET 平台(包括但不限于.NET Framework 和 .NET Core)构建 HTTP 服务的框架,用于创建 RESTful Web 服务。REST(Representational State Transfer)是一种软件架构风格,它利用HTTP协议…