Chromium无头模式在CentOS中的安装和使用

之前在文章《快速分辨静态页面和动态页面》介绍了如何区分网站静态页面和动态页面的方法。本文将讨论如何爬取动态页面。相比于静态页面,动态页面的爬取要复杂的多。除了加载静态部分的内容以外,还要处理JS动态部分(主要是运行JS代码取数并渲染页面)。虽然这部分也可以通过分析调用方式,调用参数和响应结果来开发特殊爬虫实现,但是开发成本和维护成本都非常高。一般来说,使用通用模版爬虫一天大约能创建15-20个任务,但是如果使用代码开发特殊爬虫可能就只能开发10个爬虫代码。因此,为了保证爬虫开发的效率,仍然是希望通过通用模版配置的方式,进行动态页面的数据爬取。如果要实现这个目标,那么就需要使用Selenium,Puppeteer等通用动态渲染框架(特殊情况下,可能需要使用其他动态渲染方案)。这些底层框架的原理,都是通过调用浏览器来渲染页面,通过浏览器的接口模拟用户点击或者直接运行JS代码。

为什么使用Chromium

这里以Selenium为例,目前支持的主流浏览器包括Chrome、Firefox、Edge、IE和Safari。Chrome作为Google发布的浏览器在CentOS上不方便安装(使用yum info google-chrome-stable搜不到安装包),但是使用Chrome的开源版本Chromium,就方便很多。以目前我的CentOS 7.9为例,可以直接安装。

chromium在CentOS7.9中的版本信息

使用以下命令安装并查看版本信息:

yum install chromium chromedriver
chromium-browser -version
在CentOS7.9中安装chromium

什么是Chromium无头模式

以Chrome或Chromium为例,普通模式运行浏览器会出现一个浏览器窗口,我们可以在窗口中输入网址并浏览网站内容。但是在CentOS云服务器、开发数据爬虫或自动化测试的时候,我们并不需要窗口或者没有窗口,这时候可以使用浏览器的无头模式,或者Headless Chromium

运行Headless Chromium并获取页面内容

使用Selenium或者Puppeteer框架,可以通过指定浏览器程序路径,并配置启动选项直接启动Chromium无头模式,样例代码可以联系博主下载。另外,我们也可以手动启动Headless Chromium并通过端口调用。

chromium-browser --no-sandbox  --headless --remote-debugging-port=9222 https://www.baidu.com/s?wd=jmsliu.cn

随后通过Selenium调用

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_driver = '/root/chromedriver'
browser = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
print(browser.title)

爬取与反爬取

对于大部分动态网站都是支持Selenium或者Puppeteer框架进行渲染的,也有个别网站为了防止爬虫会对Selenium进行限制,因此这种特殊的网站就需要特殊的动态渲染方案或者开发特殊爬虫。这里就不一一展开了。

参考文档:

在使用Chromium之前,也尝试下载各种Chrome历史版本,非常难找,以下是一些目前可以使用的资源:

各种历史版本Chrome:https://raw.githubusercontent.com/Bugazelle/chromium-all-old-stable-versions/master/chromium.stable.json

各种历史版本Chrome:https://www.slimjet.com/chrome/google-chrome-old-version.php

只有最新版本的Chrome:https://googlechromelabs.github.io/chrome-for-testing/#stable

各种版本ChromeDriver(Chrome和Chromium通用):https://chromedriver.storage.googleapis.com/index.html

注意,使用各种版本的Chrome下载以后直接解压并运行,可能会遇到各种动态链接库找不到的情况,例如:

libXss.so.1错误

./chrome: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory

通过安装libXScrnSaver解决:yum install libXScrnSaver

libX11.so.6错误

./chrome: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory

通过安装Chromium解决(对,所以本文直接写Chromium):yum install chromium

Captain QR Code

扫码联系船长

发表回复

您的电子邮箱地址不会被公开。