Python请求头案例如何配置请求参数

wen python案例 23

Python请求头案例:如何配置请求参数,提升爬虫成功率

目录导读

  1. 为什么请求头配置如此关键?
  2. 基础请求头案例:User-Agent与Referer
  3. 进阶请求头配置:Cookie与Authorization
  4. 动态请求头:模拟浏览器行为
  5. 常见错误与调试技巧
  6. 实战案例:爬取需要登录的网站
  7. 问答环节:解决你最关心的请求头问题

为什么请求头配置如此关键?

在Python爬虫开发中,请求头(Headers) 是服务器识别客户端身份的核心依据,未正确配置请求头,极易触发反爬机制,导致返回403、503错误或返回空数据。

Python请求头案例如何配置请求参数

根据搜索引擎优化(SEO)抓取逻辑,Googlebots和Bingbot均会携带特定User-Agent访问页面,同理,模拟人类浏览器请求能大幅提高爬虫稳定性。正确配置请求头,直接决定爬虫的数据获取成功率

基础请求头案例:User-Agent与Referer

1 User-Agent(用户代理)

User-Agent标识客户端类型(浏览器、版本、操作系统)。案例:模拟Chrome浏览器

import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
response = requests.get('https://httpbin.org/headers', headers=headers)
print(response.json())

2 Referer(来源页)

Referer告诉服务器请求从何而来,常用于防止盗链或模拟正常访问路径。

headers = {
    'Referer': 'https://www.example.com/login',
    'User-Agent': 'Mozilla/5.0 ...'
}
requests.get('https://www.example.com/api/data', headers=headers)

进阶请求头配置:Cookie与Authorization

1 Cookie(会话标识)

登录后的Cookie可保持会话状态,案例:从浏览器复制Cookie字符串:

headers = {
    'Cookie': 'sessionid=abc123; csrftoken=xyz456',
    'User-Agent': '...'
}
requests.get('https://weibo.com', headers=headers)

注意事项:Cookie有时效性,动态获取更可靠。

2 Authorization(授权令牌)

API接口常用Bearer Token验证:

headers = {
    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIs...',
    'Content-Type': 'application/json'
}
requests.post('https://api.example.com/upload', headers=headers, json={"data": "value"})

动态请求头:模拟浏览器行为

1 随机User-Agent库

使用fake_useragent库生成随机UA:

from fake_useragent import UserAgent
ua = UserAgent()
headers = {'User-Agent': ua.random}  # 每次请求不同

2 添加Accept-Language和Accept-Encoding

模拟完整的浏览器请求头:

headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Accept-Encoding': 'gzip, deflate, br',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1'
}

常见错误与调试技巧

1 常见错误

  • 403 Forbidden:未正确配置User-Agent或Cookie过期
  • 415 Unsupported Media Type:缺少Content-Type
  • 500 Internal Server Error:请求参数格式错误

2 调试技巧

使用浏览器开发者工具(F12)→ 网络(Network)标签 → 复制请求为cURL格式,再转换成Python代码(推荐curlconverter.com)。

示例:

# 原始curl
curl -H "User-Agent: Mozilla/5.0" -H "Referer: https://example.com" https://target.com
# 转化为requests代码
headers = {'User-Agent': '...', 'Referer': '...'}
requests.get('https://target.com', headers=headers)

实战案例:爬取需要登录的网站

目标:爬取知乎个人主页信息(需登录)。

步骤

  1. 手动登录后,从浏览器复制Cookie和User-Agent
  2. 构建请求头
  3. 发送请求
url = 'https://www.zhihu.com/people/self'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...',
    'Cookie': 'your_cookie_here',
    'Referer': 'https://www.zhihu.com/'
}
resp = requests.get(url, headers=headers)
# 解析HTML或JSON数据

注意:知乎反爬严格,建议添加延时并控制请求频率。

问答环节:解决你最关心的请求头问题

Q1:为什么我配置了请求头依然被封?

A:可能原因包括:1)IP请求频率过高;2)缺少某些关键头(如Accept-Language);3)Cookie已过期;4)服务器检测到非浏览器行为(如无JS支持),建议使用代理IP轮换,并模拟完整浏览器请求。

Q2:如何批量生成不同的User-Agent?

A:推荐使用fake_useragent库,调用ua.random即可,或维护一个UA列表,通过random.choice()随机选取。

Q3:请求头中的Content-Type什么时候必须设置?

A:当发送POST请求且包含数据体(如JSON、表单)时必须设置,常用值:application/jsonapplication/x-www-form-urlencodedmultipart/form-data(文件上传)。

Q4:如何获取网站所需的动态请求头(如X-CSRFToken)?

A:先发送GET请求获取页面,用正则或BeautifulSoup提取token值,再携带此值发送POST请求,示例:

# 第一步
resp = session.get('https://example.com/login')
token = re.search(r'name="csrfmiddlewaretoken" value="(.+?)"', resp.text).group(1)
# 第二步
data = {'csrfmiddlewaretoken': token, 'username': 'xxx'}
session.post('https://example.com/login', data=data)

Q5:请求头顺序会影响结果吗?

A:HTTP协议中请求头顺序理论上不影响,但某些网站的反爬机制会检测顺序,建议完全复制浏览器请求头的顺序(可通过开发者工具查看)。


Python请求头配置是爬虫成败的关键环节,从基础User-Agent到动态Cookie、Authorization,再到完整模拟浏览器请求,每一步都能显著提升成功率,遇到反爬时,结合代理IP、延时、随机UA等策略,即可高效获取所需数据。

延伸阅读:建议结合requests库的Session对象管理Cookie,或使用scrapy框架内置的请求头中间件,实现更稳定的爬虫架构。

抱歉,评论功能暂时关闭!