说在前面
在日常爬虫代码中,我们可以将各大云厂商购买到廉价服务器用来做分发爬虫任务。在一些反爬虫比较厉害的网站,我们一般可以选用Selenium来进行网站爬取。因为它模拟的就是我们平时在浏览器上的操作过程。但是这将会存在一个问题,Selenium 依赖的是具有图形界面的操作,而我们在云平台购买的服务器一般都没有图形界面的(预装Windows系统的除外)。那有没有让它在后台就可以运行的办法呢。答案是有的。下面就介绍一种常见的后台通过Selenium完成爬虫操作的过程。
1:安装浏览器(Google Chrome 版)
- 本人服务器是Ubuntu 16.04,另外18.04也测试过,一样可用;
- 程序语言环境是Python 3.6以上的版本;
- 浏览器测试过Google Chrome,本文举例版本为“87.0.4280.88”;
- 在服务器中安装 Google Chrome 浏览器,具体步骤如下:
# 安装依赖包
sudo apt install libxss1 libappindicator1 libindicator7
# 下载 Google Chrome 程序包
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
# 执行安装程序【注:在安装后会提示 error 信息,忽略即可】
sudo dpkg -i google-chrome-stable_current_amd64.deb
# 安装依赖关系
sudo apt install -f
# 安装完成,查看 Google Chrome 版本
google-chrome --version
# 本人输出的版本号是:Google Chrome 87.0.4280.88
2. 安装浏览器驱动
- Selenium 默认给我们提供了官方的驱动安装路径,例如谷歌的就是这个地址【https://sites.google.com/a/chromium.org/chromedriver/downloads】,但是根本打不开。因此,本人一般选用国内镜像地址下载安装,这里是阿里云的镜像地址【http://npm.taobao.org/mirrors/chromedriver/】,进去后选择个人对应的浏览器版本以及服务器类型即可,如下图所示。
- 下载解压之后我们将得到一个“chromedriver”文件,我们可以将其拷贝到系统的PATH路径(一劳永逸办法)或者是当前爬虫程序所在目录。这里我是直接将程序解压并拷贝到
/usr/bin
也就是我们Ubuntu的PATH
路径下,具体步骤如下:
# 1. 解压zip包,没有unzip命令的直接可以通过 sudo apt install unzip进行安装
sudo unzip chromedriver_linux64.zip
# 2. 拷贝到 /usr/bin 目录下
sudo cp chromedriver /usr/bin
# 3. 设置为可执行
sudo chmod +x chromedriver
# 4. 查看是否安装成功(查看版本号)
sudo chromedriver --version
# 本人版本号:ChromeDriver 87.0.4280.88 (89e2380a3e36c3464b5dd1302349b1382549290d-refs/branch-heads/4280@{#1761})
3:安装Selenium以及编写示例代码
- 最后就是安装 Selenium 以及运行我们的测试代码了
- 安装 Selenium 就一行解决
sudo pip install Selenium
# 想要验证安装是否成功的话,查看 Selenium 版本
sudo pip show Selenium
# 本人版本是:Version: 3.141.0
- 安装完成之后,我们可以编写下面这段程序来验证是否可以在无界面情况下爬取网页内容。直接上代码:
# -*- coding: utf-8 -*-
# --------------------------------
# Name: data_crawler.py
# Author: devshilei@gmail.com
# @Time 2020/12/24 下午4:30
# Description: 利用 Selenium 抓取数据示例
# --------------------------------
from selenium import webdriver
# 配置浏览器参数
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
# 声明浏览器,传递参数对象
browser = webdriver.Chrome(chrome_options=chrome_options)
# 打开百度
browser.get("https://www.baidu.com")
# 控制台输出网页内容
print(browser.page_source)
# 关闭浏览器
browser.quit()
- 运行程序
python data_crawler.py
- 可以看到类似如下内容,说明我们可以在服务器进行无界面爬取网页代码了。
OK.以上就是本人在工作中用Selenium在无界面服务器爬取网站的示例。希望对于各位极客们有所帮助。