Python Requests 无法通过GET请求翻页获取目标网站数据问题
解决翻页参数被忽略的问题
针对你遇到的请求带翻页参数却始终返回第一页的问题,大概率是以下原因导致的,对应解决方案如下:
1. 未维护会话状态
这类政务/企业透明化网站通常依赖Session跟踪用户的搜索会话,直接用requests.get()发送请求相当于每次都是新会话,服务器无法识别你是在已有搜索基础上翻页,因此会返回初始页。
解决办法:用requests.Session()创建会话对象,先访问初始页面(或触发一次搜索请求),再用同一个会话发送翻页请求,保持会话一致性。
2. 参数格式不匹配
HTTP请求参数均为字符串类型,你代码里的validate: True和pesquisar: True会被requests转成大写的True,但服务器可能期望小写的"true",这会导致参数不被识别。
另外要确保翻页参数和网页实际发送的完全一致,建议打开浏览器开发者工具(F12),切换到Network标签,点击翻页按钮,查看真实请求的参数,核对参数名称和值的格式。
3. 需先触发搜索动作
可能直接请求翻页参数无效,得先模拟第一次搜索的提交请求,让服务器在会话中记录你的搜索条件,后续翻页请求才会基于这个条件返回对应页面的数据。
修改后的代码示例
import requests # 创建会话对象,维持会话状态 session = requests.Session() # 先访问初始页面,建立会话Cookie base_url = "https://portaltransparencia.procempa.com.br/portalTransparencia/despesaLancamentoPesquisa.do" initial_params = { "viaMenu": "true", "entidade": "PROCEMPA" } session.get(base_url, params=initial_params) # 构造翻页请求参数,所有值用字符串格式 page_params = { "perform": "view", "actionForward": "success", "validate": "true", "pesquisar": "true", "defaultSearch.pageSize": "23", "defaultSearch.currentPage": "2", "viaMenu": "true", "entidade": "PROCEMPA" } # 用同一个会话发送翻页请求 page = session.get(base_url, params=page_params) # 验证是否获取到第二页数据 print(page.text)
额外排查建议
- 打开浏览器开发者工具,对比你的请求和浏览器真实翻页请求的完整URL、Cookie、请求头,确保所有参数和头信息一致(比如User-Agent,部分网站会校验这个字段)。
- 如果还是无效,检查翻页按钮是否通过POST请求提交——有些网站表面看起来是GET翻页,实际用POST处理,这时候需要改成
session.post()并调整参数位置。
内容的提问来源于stack exchange,提问作者Guilherme Louzada
相关产品推荐
相关产品推荐

