Python Requests POST请求Cookie格式及BS4解析前Cookie设置问题
嘿,我看到你在使用Requests和BeautifulSoup时遇到了Cookie设置不生效的问题,咱们来一步步搞定它!
首先,你代码里的核心问题出在Cookie值的格式上。Chrome开发者工具里显示的&是HTML转义后的字符——浏览器在显示Cookie的时候会把特殊字符转义,但实际发送给服务器的Cookie值里应该是普通的&符号。你直接把转义后的&放到代码里,服务器根本识别不了这个Cookie值,所以自然不会生效。
接下来,咱们修正代码,顺便优化一下Session的使用方式:
from bs4 import BeautifulSoup import requests url = 'https://example.com/item/123.html' # 把HTML转义的&替换成真实的&符号 cookies = {'aep_usuc_f': 'site=rus&c_tp=USD®ion=IE&b_locale=ru_RU'} # 初始化Session s = requests.Session() # 直接把Cookie更新到Session的cookies中,不需要先做POST请求 s.cookies.update(cookies) # 可选:加上User-Agent模拟浏览器,很多网站会校验这个 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } # 发送GET请求,Session会自动带上设置好的Cookie r = s.get(url, headers=headers) # 解析页面 soup = BeautifulSoup(r.text, 'lxml')
额外的检查小技巧
如果你还是不确定Cookie是否生效,可以做这些验证:
- 打印Session的cookies,确认是否正确加载:
print(s.cookies) - 查看响应的状态码:
print(r.status_code),200是正常,403/401可能是Cookie或反爬问题 - 打印响应内容的前几百字符,看看是不是你期望的页面:
print(r.text[:500])
另外,你之前代码里先POST再GET的操作其实没必要——只要把Cookie放到Session里,后续所有请求都会自动带上它,不需要先通过POST来“激活”Cookie。
内容的提问来源于stack exchange,提问作者Android_Minsky
相关产品推荐
相关产品推荐

