Python Requests无法获取目标表格数据的爬虫问题排查
问题排查与解决方法
核心问题分析
你遇到的情况是登录成功但拿不到目标数据,大概率是请求的参数、格式或请求头不符合网站要求,以下是具体的排查和修复方向:
1. 登录请求的参数传递错误
你的登录POST请求用了params=parameters,但表单数据应该放在请求体里,用data=parameters。params是把参数拼在URL末尾,而网站的登录接口大概率是接收请求体里的表单数据,这会导致登录可能没真正成功,或者后续会话状态异常。
修复代码:
# 把params改成data r = session.post(url, data=parameters, headers=headers)
2. 获取表格的POST请求参数缺失
你后续的POST请求里parameters = {parameter:parameter,}是无效的空参数(parameter变量甚至未定义),网页端的POST请求肯定携带了获取表格所需的关键参数(比如分页参数、筛选条件、表格标识等),你需要:
- 打开浏览器开发者工具(F12),切换到网络标签,找到网页端获取表格的POST请求
- 复制该请求的Form Data或Payload里的所有参数,完整写到你的
parameters里
3. 请求头不完整
网页端的POST请求通常会携带更多必要的请求头,比如:
Content-Type:表单提交一般是application/x-www-form-urlencoded,JSON格式则是application/jsonReferer:告诉服务器请求来自哪个页面,很多网站会校验这个X-Requested-With:标识是AJAX请求,部分网站只响应AJAX请求
你需要把浏览器里该POST请求的所有请求头(除了自动携带的Cookie、Host等)都加到你的headers里。
4. 后续请求未携带新的验证Token
有些网站不仅登录需要__RequestVerificationToken,后续的POST请求也需要重新获取页面里的Token。你需要在发送获取表格的POST请求前,先访问表格所在页面,解析页面里的__RequestVerificationToken,并加到POST参数里。
5. 重复GET请求无意义
代码里连续两次session.get(url)是多余的,登录后应该直接跳转到表格页面,或者获取表格页面内容来拿Token,没必要重复请求同一个URL。
修复后的核心代码示例
# 登录部分修复 r = session.post(url, data=parameters, headers=headers) # 跳转到表格页面(假设表格页面地址是table_url) table_page = session.get(table_url) # 重新获取页面里的验证Token new_token = BeautifulSoup(table_page.text, 'html.parser').find(attrs={'name':'__RequestVerificationToken'}).attrs['value'] # 准备获取表格的真实参数(从浏览器开发者工具复制) table_params = { "__RequestVerificationToken": new_token, "page": "1", "pageSize": "10", # 补充其他从浏览器复制的参数 } # 完善请求头 table_headers = headers.copy() table_headers['Content-Type'] = 'application/x-www-form-urlencoded' table_headers['Referer'] = table_url # 发送获取表格的POST请求 r = session.post(table_api_url, data=table_params, headers=table_headers) # 查看响应内容 print(r.text)
内容的提问来源于stack exchange,提问作者Flari
相关产品推荐
相关产品推荐

