Python+Selenium+Mongo爬取ZVG网站遇链接失效,求模拟请求方案
解决ZVG Portal搜索返回Error的模拟请求方案
可以通过模拟HTTP请求直接与后端交互来尝试获取目标页面,以下是具体思路和步骤:
先分析真实请求细节
打开浏览器开发者工具(F12)的Network标签,手动完成一次搜索操作(哪怕当前返回Error,也可查看请求参数):- 记录请求的方法(POST/GET)、目标URL、请求Headers(重点关注
Cookie、User-Agent、Referer、Content-Type) - 提取请求中的所有参数,包括下拉菜单对应的
value值(注意是HTML选项的value属性,不是显示文本),以及页面中可能存在的隐藏字段(比如CSRF令牌,通常是csrf_token或类似名称的input)
- 记录请求的方法(POST/GET)、目标URL、请求Headers(重点关注
构造模拟请求
用requests库实现会话管理和请求发送:- 初始化
requests.Session(),先请求初始搜索页面,获取并保存Cookie和CSRF令牌 - 构造搜索参数字典,确保所有必填字段的参数值与浏览器提交的一致
- 发送请求时带上完整的Headers(模拟浏览器环境),将参数以对应格式(如
form-data或x-www-form-urlencoded)提交
- 初始化
注意事项
- 确保参数合法性:下拉选项必须使用页面提供的合法
value值,不能自定义 - 维持会话:用Session对象自动管理Cookie,避免因Cookie过期导致的验证失败
- 反爬规避:设置真实的
User-Agent,必要时添加合理的请求间隔,避免触发IP限制 - 响应处理:如果后端返回HTML,用
BeautifulSoup解析提取目标链接;如果是JSON格式,直接解析数据即可
- 确保参数合法性:下拉选项必须使用页面提供的合法
为什么模拟请求可能解决问题
Selenium依赖前端渲染,可能因JS事件触发不全、页面渲染异常导致请求参数缺失或错误;而直接模拟后端请求可以绕过前端环节,直接传递符合后端要求的参数,避开前端渲染引发的异常。
内容的提问来源于stack exchange,提问作者Rodrigez
相关产品推荐
相关产品推荐

