通过selenium实现在server端的无界面抓取,一般有两种方案:
- 通过headless模式抓取
- 通过xvfb实现抓取
下面将对以下两种方法的实现进行说明,说明采用ubuntu和chrome为例。
通过headless抓取,首先是安装chrome浏览器。
1 2 3 4
| sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list.d/ wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add - sudo apt-get update sudo apt-get install google-chrome-stable
|
执行完以上命令后,输入:
即可查询chrome的版本。
之后是安装chromedriver
可以通过自己的chrome版本号匹配到对应的chromedriver版本。
chromedriver下载地址
安装seleniume
在chromedriver所在的目录下新建test.py
写入:
1 2 3 4 5 6 7 8 9 10 11 12 13
| from selenium import webdriver
chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-gpu') browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get("https://www.baidu.com")
print (browser.page_source)
browser.quit()
|
执行
不报错就安装完成。
前面安装chrome与chrome的步骤相同,不同的是,需要安装xvfb
在ubuntu下,首先安装xvfb,
安装pyvirtualdisplay,
1
| pip install pyvirtualdisplay
|
在python代码中实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from selenium import webdriver
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800)) display.start()
chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-gpu') browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get("https://www.baidu.com")
print (browser.page_source)
browser.quit()
|
正确打印即ok。