如何使用Python requests正确设置Cookie并配置浏览器请求头规避反爬
解决方法
从浏览器获取请求头和Cookie的步骤
- 打开目标网站,登录到你需要的会话状态
- 按下F12打开开发者工具,切换到「网络(Network)」标签
- 刷新页面,在网络请求列表里找到和你爬取地址域名一致的请求,点击该请求
- 在右侧详情面板找到「请求头(Request Headers)」区块,里面包含所有需要的User-Agent、Accept等请求头字段;同时可以找到「Cookie」字段,就是当前会话的Cookie值
注意:请求头里的Cookie字段可以直接复制使用,也可以单独拆分每个Cookie的键值对使用。
配置到requests请求的方法
你可以直接把请求头做成字典,传入session的headers属性,后续所有请求都会自动携带这些配置:
import requests import bs4 import re # 替换成你从浏览器复制的请求头,反爬严格的话可以把所有请求头字段都复制进来 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "Cookie": "你从浏览器复制的完整Cookie字符串" } r = requests.session() # 给session全局配置请求头,后续所有get/post请求都会自动携带 r.headers.update(headers) # 原有逻辑不需要修改 response = r.get(url=url_to_start) price_table=[] while len(price_table) < 100: if response.status_code == 200: soup = bs4.BeautifulSoup(response.text, features='html.parser') souplist = soup.find_all(attrs={"class": "col-xs-3"}) souptxt='' for i in souplist: souptxt+=str(i) list1=re.findall(patterne,souptxt) price_table.extend(list1) response = r.get(url=url_to_follow)
如果你不想把Cookie拼在headers里,也可以单独给session设置Cookie:
# 把Cookie拆成键值对的格式 cookies = { "cookie键1": "cookie值1", "cookie键2": "cookie值2" } r.cookies.update(cookies)
- 浏览器的会话Cookie有有效期,如果后续请求出现403或者登录失效,重新从浏览器复制最新的Cookie替换即可。
- 如果反爬机制还校验Referer、Origin等字段,也可以一并加到headers字典里。
内容的提问来源于stack exchange,提问作者user14087589
相关产品推荐
相关产品推荐

