使用requests_html无法获取MathWorks页面指定div内容的问题求助
问题分析与解决办法
问题原因
- 动态渲染等待不足:
arender()默认等待时间可能不足以让页面JavaScript完成reflist_content区域的模块内容渲染,导致抓取时该区域为空。 - 未精准定位目标元素:遍历所有
<div>标签的方式效率低下,且没有直接锁定id="reflist_content"的目标容器,容易遗漏关键内容。 - 反爬识别风险:
requests_html默认请求头可能被MathWorks的反爬机制识别为爬虫,导致动态内容不返回。
修正后的代码示例
from requests_html import HTMLSession session = HTMLSession() # 模拟真实浏览器请求头,规避反爬检测 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } url = 'https://www.mathworks.com/help/radar/referencelist.html?type=block' r = session.get(url, headers=headers) # 延长渲染等待时间,确保JS完全加载并渲染内容 r.html.arender(wait=5, sleep=2) # 直接定位目标div容器 target_container = r.html.find('#reflist_content', first=True) if target_container: # 提取容器内所有模块的链接 module_links = target_container.find('a') for link in module_links: print(f"模块名称: {link.text.strip()}") print(f"链接地址: {link.attrs.get('href', '无链接')}\n") else: print("未找到目标容器reflist_content")
关键调整说明
- 添加自定义请求头:用真实浏览器的User-Agent模拟请求,降低被反爬拦截的概率。
- 延长渲染等待时间:
wait=5让浏览器等待5秒确保动态内容加载,sleep=2在渲染完成后再等待2秒,保证内容稳定。 - 精准定位目标元素:通过
#reflist_content选择器直接锁定目标容器,避免无效遍历。
额外注意事项
- 如果仍无法获取内容,可尝试添加
scrolldown参数(如scrolldown=3),模拟页面滚动触发内容加载。 - 若页面后续出现登录限制,需补充登录逻辑,但当前目标页面为公开可访问状态。
内容的提问来源于stack exchange,提问作者Alexey Bogdanov
相关产品推荐
相关产品推荐

