前言
今天无意中发现的requests是无法解析js执行后的结果的,只能把源码中的js代码给返回过来,而刚好需要读取一个网页的js执行后的结果,于是发现了requests_html这个模块,但是按照示例代码执行后就一直报错,后来才发现它是基于Chromiun处理的,而模块自身下载Chromium在国内环境中是失效的。
使用示例
import requests_html
url = "https://www.baidu.com"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}
session = requests_html.HTMLSession()
req = session.get(url, headers=headers)
req.encoding = "utf-8"
req.html.render()
get_html = req.html.html
print(get_html)
思路
既然模块自身不能下载,那我们只能自己动手下载了,于是乎开始各种搜索,终于找到一个比较好用的下载镜像。
https://registry.npmmirror.com/binary.html?path=chromium-browser-snapshots
再接下来就是放置路径的问题了。
进入python安装目录下的\Lib\site-packages\pyppeteer目录,然后打开chromium_downloader.py文件
找到代码:
chromiumExecutable = {
'linux': DOWNLOADS_FOLDER / REVISION / 'chrome-linux' / 'chrome',
'mac': (DOWNLOADS_FOLDER / REVISION / 'chrome-mac' / 'Chromium.app' /
'Contents' / 'MacOS' / 'Chromium'),
'win32': DOWNLOADS_FOLDER / REVISION / 'chrome-win32' / 'chrome.exe',
'win64': DOWNLOADS_FOLDER / REVISION / 'chrome-win32' / 'chrome.exe',
}
这里调用了 DOWNLOADS_FOLDER 和 REVISION,那我们继续往下找,终于找到了
DOWNLOADS_FOLDER = Path(__pyppeteer_home__) / 'local-chromium'
DEFAULT_DOWNLOAD_HOST = 'https://storage.googleapis.com'
DOWNLOAD_HOST = os.environ.get('PYPPETEER_DOWNLOAD_HOST', DEFAULT_DOWNLOAD_HOST)
BASE_URL = f'{DOWNLOAD_HOST}/chromium-browser-snapshots'
REVISION = os.environ.get('PYPPETEER_CHROMIUM_REVISION', __chromium_revision__)
我们在源代码的下方直接加入PRINT把路径打印出来。
DOWNLOADS_FOLDER = Path(__pyppeteer_home__) / 'local-chromium'
DEFAULT_DOWNLOAD_HOST = 'https://storage.googleapis.com'
DOWNLOAD_HOST = os.environ.get('PYPPETEER_DOWNLOAD_HOST', DEFAULT_DOWNLOAD_HOST)
BASE_URL = f'{DOWNLOAD_HOST}/chromium-browser-snapshots'
REVISION = os.environ.get('PYPPETEER_CHROMIUM_REVISION', __chromium_revision__)
print(DOWNLOADS_FOLDER)
print(REVISION)
此时我们再执行一下之前的脚本,就能得到路径了。
C:\Users\eson\AppData\Local\pyppeteer\pyppeteer\local-chromium
1181205
那么我们组合一下路径就可以得知
C:\Users\eson\AppData\Local\pyppeteer\pyppeteer\local-chromium\1181205\chrome-win
把下载好的Chromium放置在这个目录就可以了。
总结
这个问题是解决了,模块也正常使用了,但是我发现我遇到的问题远没这么简单,还需要继续往下进行JS逆向分析
评论 (0)