0. 前言
说到Python爬虫,就一定会涉及到“反爬”策略,就会遇到“爬取动态页面元素”的问题,如果目标网站没有其他的反爬措施,那么“动态元素”就是我们这里要解决的唯一难题。而解决的方式就是简单粗暴地想办法模拟人在浏览器上操作,进而触发相应动态元素的加载,也就指向了强大的Selenium
。
众所周知,Chrome
是Google家的浏览器,在2007年开始推出了自己的无头模式。而我们曾经熟悉的PhantomJS
却在之后不再被Selenium
所支持(目前只支持Chrome
和Firefox
的无头模式,据说这是一种大厂效应23333)。在MacOS
下,坑会少一些,但放在我的服务器上坑就多了起来。
注:以下配置过程请在非root
用户账号下完成。
1. 安装chrome
1.1 添加repo
源
$ sudo vi /etc/yum.repos.d/google.repo
在打开的空文件中填入以下内容
[google]
name=Google-x86_64
baseurl=http://dl.google.com/linux/rpm/stable/x86_64
enabled=1
gpgcheck=0
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
1.2 yum
安装
$ sudo yum update
$ sudo yum install google-chrome-stable
2. 安装chromedriver
2.1 查看chrome
的版本
$ google-chrome --version
2.2 下载chromedriver
请注意chrome
和chromedriver
的区别,前者是浏览器,后者是其驱动,而二者缺一不可。推荐在官网下载最新的chromedriver
,如果没有“梯子”,这里也有各个版本的chromedriver
,而你要选择的版本要与你的chrome
版本对应(如ChromeDriver 2.46
支持 Chrome v71-73
)。
2.3 添加至环境变量$PATH
$ sudo vim ~/.bash_profile
打开后在适当的位置添加:
(假设你把chromedriver
放到了/home/xxx/drivers/bin/
目录下)
export PATH=/home/xxx/drivers/bin:$PATH
在CentOS
中,更推荐在最后export PATH
,而前面加上一行赋值
PATH=$PATH:/home/xxx/drivers/bin
这两种方式作用上是完全等价的。
3. 安装selenium
selenium
可以在你项目的虚拟环境中简单地用pip
安装
$ pip3 install selenium
4. 脚本测试
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
DRIVER_PATH = '/home/xxx/drivers/bin/chromedriver'
if __name__ == "__main__":
# 设置浏览器
options = Options()
options.add_argument('--no-sandbox')
options.add_argument('--headless') # 无头参数
options.add_argument('--disable-gpu')
# 启动浏览器
driver = Chrome(executable_path=DRIVER_PATH, options=options)
# 访问目标URL
driver.get('https://www.baidu.com/')
print(driver.page_source)
driver.close()
driver.quit()
注意,这里的--no-sandbox
和--headless
是必须的,而且必须按照--no-sandbox
在最前面的顺序,否则会报一些非常摸不着头脑的错误(这就是最坑的地方)。
希望看到这篇文章的你能解决想要解决的问题。
网友评论