You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用requests-html爬取网页无法定位元素问题如何解决?

问题根因

你没有显式触发requests-html的JS渲染逻辑:虽然该库本身支持JS渲染,但这个能力不会在session.get()请求后自动执行,你拿到的r.html默认是服务器返回的原始静态HTML,该页面的医生列表、个人主页链接等内容都是JS动态生成的,静态HTML里只有外层的容器节点,没有下层实际内容,所以你定位到content wrapper后拿不到子元素。

解决方法

在拿到请求响应后,先调用r.html.render()方法,触发内置Chromium实例执行页面JS、加载完整DOM后再做元素定位。

修改后的可运行代码

from requests_html import HTMLSession

firstname = 'robert'
lastname = 'b'
city = 'Palo_Alto'

url = f'https://openpaymentsdata.cms.gov/search/physicians/by-name-and-location?firstname={firstname}&lastname={lastname}&city={city}'

session = HTMLSession()
r = session.get(url)
# 显式触发JS渲染,sleep参数是给页面预留加载时间,可根据网络情况调整
r.html.render(sleep=3)

sel = 'body > div.siteOuterWrapper > div.siteInnerWrapper > div.siteContentWrapper'
print(r.html.find(sel, first=True).text)
注意事项
  • 第一次调用render()方法时,requests-html会自动下载适配的Chromium内核,需要等待几分钟,后续运行不会再重复下载。
  • 如果渲染后还是拿不到目标元素,可以适当调大sleep参数的数值,确保页面异步请求的数据全部加载完成再解析DOM。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 22:24:04