使用requests+BeautifulSoup爬取页面无法获取<div id='App'>完整内容的求助
解决动态渲染页面的爬取问题(无需Selenium)
方法一:直接抓取后端数据接口
这类单页应用的内容由JavaScript通过异步接口加载,直接请求数据接口是最高效的方案:
- 打开Edge开发者工具(F12),切换到「网络」标签页。
- 刷新页面,筛选「XHR/Fetch」类型请求,定位返回目标内容的API接口。
- 复制接口的URL、请求头及参数,用
requests直接调用该接口,获取的JSON数据就是<div id='App'>的渲染源,可直接解析或按需生成HTML。
方法二:使用支持JS渲染的请求库(requests-html)
requests-html可加载并执行页面JS,同时支持证书配置,还能指定Edge浏览器路径复用其证书环境:
- 安装依赖:
pip install requests-html - 编写代码:
from requests_html import HTMLSession from bs4 import BeautifulSoup # 指定本地Edge浏览器可执行文件路径(Windows示例,自行调整) edge_exec_path = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" # 初始化会话,指定Edge作为渲染浏览器 session = HTMLSession(browser_args=[f'--executable-path={edge_exec_path}']) # 配置证书信息 cert = (certs['cert'], certs['password']) response = session.get(url, cert=cert, verify=certs['CA_file']) # 等待页面JS渲染完成 response.html.render() # 解析渲染后的完整HTML soup = BeautifulSoup(response.html.html, 'html.parser') app_div_content = soup.find('div', id='App') print(app_div_content)
内容的提问来源于stack exchange,提问作者corianne1234
相关产品推荐
相关产品推荐

