selenium初步实现server端自动抓取

通过selenium实现在server端的无界面抓取,一般有两种方案:

  1. 通过headless模式抓取
  2. 通过xvfb实现抓取

下面将对以下两种方法的实现进行说明,说明采用ubuntu和chrome为例。

  • 通过headless

通过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

执行完以上命令后,输入:

1
google-chrome --version

即可查询chrome的版本。

之后是安装chromedriver

可以通过自己的chrome版本号匹配到对应的chromedriver版本。

chromedriver下载地址

安装seleniume

1
pip3 install selenium

在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') #打开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()

执行

1
python3 test.py

不报错就安装完成。

  • 通过xvfb

前面安装chrome与chrome的步骤相同,不同的是,需要安装xvfb

在ubuntu下,首先安装xvfb,

1
sudo apt install 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。

作者

Mch Wang

发布于

2019-04-12

更新于

2021-09-12

许可协议

评论