使用Python requests获取Instagram页面与浏览器结果不一致问题求助
问题原因及解决办法
核心原因:请求头特征被反爬机制识别
Instagram会根据请求的来源标识判断是否返回完整内容,requests默认的请求头(尤其是User-Agent字段)是python-requests/x.x.x这类爬虫特征明显的标识,会被拦截并返回仅含<title>Instagram</title>的简化页面;而你在Chrome禁用JS时,请求带的是浏览器标准的User-Agent,所以能拿到带用户名的完整title。
具体修复步骤
替换User-Agent为浏览器标识
直接把请求头的User-Agent改成主流浏览器的标准值,这是最关键的一步: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' } response = requests.get('https://instagram.com/test', headers=headers)补充浏览器默认请求头(可选)
若仅改User-Agent无效,可加上Accept、Accept-Language等浏览器自带的字段,进一步模拟真实请求: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,en-US;q=0.5,en;q=0.3' }requests-html使用注意
用这个库时,除了设置正确的User-Agent,还要确保启用JS渲染并等待页面加载,比如调用render(sleep=2),避免因渲染不完整导致内容缺失。Cookie补充(极端情况)
如果以上方法都失效,可以从浏览器复制正常访问后的Cookie添加到请求头,模拟真实用户的会话状态。
内容的提问来源于stack exchange,提问作者anxiety
相关产品推荐
相关产品推荐

