使用Python requests爬取PHP Session站点时Cookie失效如何解决
问题原因与解决方案
问题产生原因
- 请求方法使用错误:带查询参数的搜索请求属于GET场景,你误用POST请求提交,服务端返回的会话Cookie本身就不稳定。
- 分页请求未携带完整搜索参数:你从第二页开始的请求只带了
start分页参数,没有带上psearch、Submit、psearchtype这些搜索关联参数,服务端无法将分页请求和之前的「sites」搜索上下文绑定,判定会话失效后就会清空返回的Cookie,返回无搜索条件的默认页面。 - Cookie管理逻辑错误:你每次请求都用新响应的Cookie覆盖原有有效Cookie,第二页响应已经返回了部分失效的Cookie,到第三页直接覆盖为空,自然无法继续访问关联搜索结果的分页。
解决方法
按以下规则修正代码即可正常爬取所有相关分页:
- 统一使用GET请求,匹配这类查询页面的接口设计
- 所有分页请求都携带完整的搜索参数,不要只传分页参数
- 使用
requests.Session()自动管理Cookie,不需要手动提取、传递、更新Cookie,避免手动操作出错
修正后的代码如下:
import requests # 初始化Session自动管理Cookie session = requests.Session() # 基础搜索参数,所有分页都要携带 base_params = { "psearch": "sites", "Submit": "GO", "psearchtype": "" } # 爬取1-4页 for i in range(1, 5): # 计算分页start值,第一页是1,第二页21,以此类推 base_params["start"] = 1 + 20*(i-1) url = "https://db.aa419.org/fakebankslist.php" # 用GET请求,参数自动拼接在URL后,Session自动带Cookie response = session.get(url, params=base_params) # 这里补充你的页面解析逻辑即可 print(f"第{i}页响应长度:{len(response.text)}")
内容的提问来源于stack exchange,提问作者zurich_ruby
相关产品推荐
相关产品推荐

