2020-06-18 23:03:15
使用 Python 的 Requests 库抓取网页数据时,若遇到无法在 Response 中获取正确内容的问题,通常由编码设置不当或请求模拟不足导致,可通过以下方法针对性解决:
一、编码问题解决方案当直接打印 response.text 显示乱码或非预期内容时,可能是 Requests 未自动识别响应编码。需手动设置 response.encoding 属性:
发送请求后,检查响应头中的编码信息(如 Content-Type: text/html; charset=gbk)。
若未明确指定编码,可尝试常见编码(如 utf-8、gbk、big5)逐一测试。
通过 response.encoding = "编码名称" 强制指定编码。
若响应内容为登录页面、验证码或空数据,可能是请求头缺失关键信息(如 Cookie、Referer、Authorization)或未处理动态加载。
完善请求头:
使用浏览器开发者工具(F12)复制完整的请求头,包括 User-Agent、Cookie、Referer 等。
示例:headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...", "Cookie": "sessionid=abc123; csrftoken=xyz789", "Referer": "
处理动态内容:
若页面通过 JavaScript 动态加载,需使用 Selenium 或 Playwright 模拟浏览器行为。
示例(Selenium):from selenium import webdriverdriver = webdriver.Chrome()driver.get("
会话管理:
使用 requests.Session() 保持会话,自动处理 Cookie:session = requests.Session()session.headers.update({"User-Agent": "Mozilla/5.0"})session.get("
若 response.status_code 非 200,需根据状态码调整请求(如 403 需添加 Authorization,404 需检查 URL)。
使用工具(如 Postman)手动复现请求,确认是否为代码问题。
部分网站会检测频繁请求,可添加延迟(time.sleep(2))或使用代理 IP。
通过以上方法,可系统性解决 Requests 库获取响应内容不正确的问题。若问题仍存在,建议结合网络抓包工具(如 Wireshark)进一步分析请求与响应的细节。