解决使用requests_html模块,第一次使用.html.render()方法渲染,程序下载chrome失败的问题

1.手动下载chrome

下载地址:https://npm.taobao.org/mirrors/chromium-browser-snapshots/Win_x64/650583/
下载完成之后,找个地方保存并解压。

2.找到requests_html运行chrome的路径

进入python安装目录下的\Lib\site-packages\pyppeteer 打开chromium_downloader.py文件,可以看到不同系统执行chromium的路径如下图所示
其中黄色为笔者的64 位windows操作系统(以该操作系统为例),可以看到在该操作系统下,chromium的执行路径为DOWNLOADS_FOLDER / REVISION / ‘chrome-win32’ / ‘chrome.exe’
我们继续往前找DOWNLOADS_FOLDER、REVISION 发现他们的路径依赖于__chromium_revision__,和__pyppeteer_home__,而这两个属性在这个文件中已经被导入了。
在这里插入图片描述
在这里插入图片描述

### 使用 Requests 库处理 JavaScript 渲染的内容 Requests 是 Python 的 HTTP 请求库,非常适合用于发送请求并获取网页内容。然而,默认情况下它并不支持执行 JavaScript 来加载动态生成的内容。为了克服这一限制,可以借助第三方工具 Splash 或 Selenium 实现浏览器自动化来解决这个问题。 #### 方法一:使用 Splash 和 Scrapy-Splash 集成 Scrapy 提供了与 JavaScript 解析集成的方法之一是通过使用 Splash[^1]。虽然这个方法主要针对的是 Scrapy 框架,但是也可以单独利用 Splash 作为独立服务配合 Requests 库一起工作: 1. **安装 Docker 并启动 Splash** 如果还没有安装 Docker,则先按照官方指南完成安装过程。接着拉取并运行 Splash 容器: ```bash docker pull scrapinghub/splash docker run -p 8050:8050 scrapinghub/splash ``` 2. **编写 Python 脚本** 下面是一个简单的例子展示如何结合 Requests 发送带有 Lua 脚本的 POST 请求给 Splash 服务器以实现页面抓取和 JavaScript 执行的功能。 ```python import requests url = 'http://localhost:8050/render.html' lua_script = """ function main(splash, args) assert(splash:go(args.url)) assert(splash:wait(0.5)) -- wait for JS to render return { html = splash:html(), png = splash:screenshot() } end""" data = {'lua_source': lua_script, 'url': 'https://example.com'} response = requests.post(url, json=data) print(response.text) ``` 此脚本会向目标网站发出请求,并等待半秒钟让 JavaScript 加载完毕后再返回 HTML 结构以及截图数据。 #### 方法二:Selenium WebDriver 方案 另一种更常见的解决方案就是采用 Selenium WebDriver 这样的浏览器驱动程序来进行完整的浏览器模拟操作。这允许完全控制浏览器实例,从而能够轻松应对复杂的交互逻辑或长时间延迟加载的情况。 ```python from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager def setup_driver(): options = webdriver.ChromeOptions() options.add_argument('--headless') # Run headlessly (no GUI) driver = webdriver.Chrome(service=ChromeService( ChromeDriverManager().install()), options=options) return driver driver = setup_driver() try: url = "https://example.com" driver.get(url) page_content = driver.page_source finally: driver.quit() print(page_content) ``` 这段代码展示了怎样设置无头模式下的 Chrome 浏览器实例访问指定网址,并打印最终渲染后的页面源码。 这两种方式各有优缺点,在选择具体方案时可以根据实际需求权衡考虑性能、易用性和维护成本等因素。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值