Python Requests无法获取正确URL内容的问题排查
解决ETFDB分页请求始终返回第1页的问题
问题原因分析
- 锚点参数不被服务器解析:原URL中的
#etfs&...属于浏览器端锚点,服务器不会处理#之后的参数,因此无论你在锚点后添加多少分页参数,服务器都无法接收,只会返回默认的第1页内容。而浏览器能正常显示对应分页,是因为页面加载后通过JavaScript读取锚点参数,再动态请求对应数据。 - 请求头缺失导致被识别为非浏览器请求:服务器可能通过检查
User-Agent等请求头字段判断请求合法性,若requests请求未携带这类头信息,服务器可能返回默认页面。
解决方法
修正URL参数格式
把URL中的#替换为?,让服务器正确解析分页参数。示例正确URL:https://etfdb.com/etfs/asset-class/equity/?sort_name=assets_under_management&sort_order=desc&page=61(
etfs参数可测试是否必要,多数情况下可省略)添加浏览器请求头
模拟浏览器发送请求,至少携带User-Agent字段,示例代码:import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } url = 'https://etfdb.com/etfs/asset-class/equity/?sort_name=assets_under_management&sort_order=desc&page=61' response = requests.get(url, headers=headers) # 可通过打印或解析HTML验证内容是否对应目标分页排查动态加载的API接口
如果上述方法无效,说明页面数据通过AJAX动态加载。打开浏览器开发者工具的「Network」面板,切换到「XHR/Fetch」标签,切换分页时观察新出现的请求,找到返回分页数据的API接口,直接请求该接口获取结构化数据(通常为JSON格式),这比解析HTML更高效可靠。
内容的提问来源于stack exchange,提问作者rochimer
相关产品推荐
相关产品推荐

