python爬虫(2)

在上一篇中,我们已经搭建好了python3的开发环境。接下来我们来配置爬虫需要用到的一些第三方库和工具。比如,模拟浏览器发送请求用到的第三方库Requests、Selenium和aiohttp等。

请求库的安装

安装Requests

Requests是第三方库,在安装python时默认不会安装这个库,需要我们手动进行安装。
安装Requests有以下三种方式:

  1. pip安装

在三大平台下均可以通过pip这个包管理工具来安装。命令如下:

1
pip3 install requests

  1. wheel安装

wheel是python的一种安装包,后缀为.whl,在网络不好的情况下可以选择先下载wheel文件再进行安装,然后用pip3命令安装即可。在此之前,需要先安装wheel库,命令如下:

1
pip3 install wheel

然后在Pypi上下载对应的wheel文件,最新版本为2.22.0,下载地址为:https://pypi.org/project/requests/#files。下载完成后,利用pip3安装即可。

  1. 源码安装

如果不想使用pip安装,或者想安装特定版本,可以选择下载源码安装。Requests项目的源码地址为:https://github.com/kennethreitz/requests。可以通过git或者curl下载,命令如下:

1
2
3
4
#git方式
git clone git://github.com/kennethreitz/requests.git
#curl方式
curl -OL https://github.com/kennethreitz/requests/tarball/master

下载完成后,进入目录,安装即可。

1
2
cd requests
python3 setup.py install

安装Selenium

Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,对于一些JavaScript渲染的页面,可以有效地进行抓取。
安装Selenium有以下两种方式:

  1. pip安装

推荐直接使用pip安装,命令如下:

1
pip3 install selenium

  1. wheel安装

从Pypi下载对应的wheel文件进行安装,最近版本为3.141.0,下载地址为:https://pypi.org/project/selenium/#files
下载完成后,使用pip进行安装。

Selenium需要用浏览器(如chrome、Firefox等)来配合Selenium工作。接下来介绍Chrome、Firefox、PhantomJS三种浏览器的配置方式,有了浏览器,我们才可以配合Selenium进行页面的抓取。

安装ChromeDriver

首先,需要下载安装Chrome浏览器。然后,我们需要安装ChromeDriver,利用ChromeDriver驱动Chrome浏览器完成相应的操作。具体步骤如下:

  1. 查看Chrome浏览器的版本,点击Chrome菜单中的“帮助——关于Google Chrome”,即可查看Chrome的版本号。
  2. 打开ChromeDriver的官方网站,根据上述查到的Chrome浏览器的版本号,下载对应的ChromeDriver,下载地址为https://chromedriver.storage.googleapis.com/index.html
  3. 下载完成后,将ChromeDriver的可执行文件配置到环境变量下,windows中,可直接将chromedriver.exe放到Python安装目录的Scripts目录下。在Linux和Mac下,需要将可执行文件配置到环境变量或将文件移动到属于环境变量的目录下。例如,要移动文件到/usr/bin目录下,命令行下进入文件所在路径,执行如下命令将其移动到/usr/bin,
    1
    sudo mv chromedriver /usr/bin

当然,也可以将ChromeDriver配置到$PATH,首先,将可执行文件放到某一目录,例如将其放在/usr/local/chromedriver目录下,接下来修改~/.profile文件,相关命令如下:

1
export PATH="$PATH:/usr/local/chromedriver"

保存后,执行如下命令:

1
source ~/.profile

完成环境变量的配置。

验证安装,配置完成后,在命令行直接执行chromedriver命令,如下:

1
2
3
4
>chromedriver
Starting ChromeDriver 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}) on port 9515
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.

出现上述输出,则证明ChromeDriver的环境变量配置好了。
随后再在程序中测试,执行如下代码:

1
2
from selenium import webdriver
browser = webdriver.Chrome()

运行之后,将会弹出一个空白的Chrome浏览器,则说明安装配置成功。如果弹出后闪退,说明ChromeDriver和Chrome浏览器不兼容,更换ChromeDriver版本后重试。如果没有弹出,则说明安装配置出错,重新进行安装配置。

安装GeckoDriver

对于Firefox浏览器,需要安装另一个驱动GeckoDriver来完成Selenium的对接。
首先,安装Firefox浏览器,然后再进行GeckoDriver的安装配置。具体步骤如下:

  1. 在github上找到GeckoDriver的发行版本,当前最新版本为0.24.0,根据不同的平台下载对应的版本。
  2. 下载完成之后,需要进行GeckoDriver的环境变量配置,可参考上述chromedriver的配置。

验证安装,在命令行直接执行geckodriver命令,如下:

1
2
3
>geckodriver
1501817228279 geckodriver INFO geckodriver 0.24.0
1501817228285 geckodriver INFO Listening on 127.0.0.1:4444

随后执行如下python代码,在程序中测试一下:

1
2
from selenium import webdriver
browser = webdriver.Firefox()

运行之后,将会弹出一个空白的Firefox浏览器,则证明配置成功,若没有弹出,则说明配置出错,检查前述步骤。

现在我们就可以使用Chrome或Firefox进行网页抓取,但是这样有个问题,因为程序运行时需要一直开着浏览器,在爬取过程中,浏览器可能一直动来动去。目前最新的Chrome浏览器已经支持无界面模式了,但如果是旧版本就不支持。所以这里还有另一种选择,就是安装一个无界面浏览器PhantomJS,此时抓取过程会在后台运行,不会有窗口出现。
接下来介绍一下PhantomJS的安装。

安装PhantomJS

PhantomJS是一个无界面的、可脚本编程的WebKit浏览器引擎,它原生支持多种Web标准:DOM操作、CSS选择器、JSON、Canvas以及SVG。Selenium支持PhantomJS,PhantomJS的运行效率很高,支持各种参数配置,使用方便。
在PhantomJS的官方网站下载安装包,PhantomJS支持多种操作系统,比如windows、Linux、Mac、FreeBSD等,选择对应平台的安装包下载即可。
下载完成后,配置PhantomJS的环境变量里。同样参考ChromeDriver的配置步骤。
在命令行测试phantomjs命令,进入PhantomJS交互式命令行,如下:

1
2
3
4
>phantomjs
phantomjs>
phantomjs>phantomjs -v
2.1.1

在程序中测试PhantomJS,如下:

1
2
3
4
from selenium import webdriver
browser = webdriver.PhantomJS()
browser.get('https://www.baidu.com')
print(browser.current_url)

运行之后,不会有窗口弹出,但实际上PhantomJS已经在后台运行起来了。这里访问了百度,并将当前访问的URL打印了出来。这样,便完成了PhantomJS的配置,后面可以利用它来完成一些页面的抓取。

安装aiohttp

前面安装的Requests库是以一个阻塞式HTTP请求库,当我们发出一个请求后,程序会一直等待服务器响应,直到得到响应后,程序才会进行下一步处理。其实,这个过程比较耗费资源。如果程序可以在等待过程中处理其他事情,比如进行请求的调度、响应的处理等,那么爬取效率一定会大大提高。
aiohttp就是这样一个提供异步Web服务的库,从Python 3.5版本开始,Python中加入了async/await关键字,使得回调的写法更加直观和人性化。aiohttp的异步操作借助于async/await关键字的写法变得更加简洁,架构更加清晰。使用异步请求库进行数据抓取时,会大大提高效率。
推荐使用pip安装aiohttp,命令如下:

pip3 install aiohttp

另外,官方推荐安装额外的两个库:一个是字符编码检测库cchardet,另一个是加速DNS的解析库aiodns,安装命令如下:

pip3 install cchardet aiodns

解析库的安装

爬取网页后,下面就是要从网页中提取信息,提取信息最基本的就是利用正则表达式,但是写起来很繁琐。有很多强大的解析库,如lxml、Beautiful Soup、Pyquery等。此外,还有非常强大的解析方法,如XPath解析和CSS选择器解析。

安装lxml

lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。lxml是一个非常重要的库,后面的Beautiful Soup、Scrapy框架都需要用到此库。下面介绍一下在三大平台的安装。

  1. windows下的安装

使用pip安装,命令如下:

pip3 install lxml

安装过程中可能会提示缺少libxml2库等信息,可以采用wheel方式安装。最新版本4.3.3,下载地址:https://pypi.org/project/lxml/#files,下载对应平台的版本即可。然后利用pip安装即可。

  1. Linux下的安装

使用pip安装,命令如下:

pip3 install lxml

如果报错,可以尝试以下解决办法。
CentOS/RedHat
对于这类系统,错误主要是缺少必要的库。安装必要的库:

1
2
sudo yum groupinstall -y development tools
sudo yum install -y epel-release libxslt-devel libxml2-devel openssl-devel

主要是libxslt-deve和libxml2-devel这两个库,lxml依赖它们,安装好之后,重新安装lxml。
Ubuntu/Debian/Deepin
对于这类系统,错误也主要是缺少必要的库。安装必要的库:

1
sudo apt-get install -y python3-dev build-essential libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev

安装好之后,重新安装lxml。

  1. Mac下的安装

使用pip安装,命令如下:

pip3 install lxml

如果出错,安装必要的库:

xcode-select –install

然后重新安装lxml即可。

安装Beautiful Soup

Beautiful Soup是Python的一个HTML/XML的解析库,用它可以方便地从网页中提取数据。它拥有强大的API和多样的解析方式。下面介绍一下安装方式。
Beautiful Soup的HTML/XML解析器依赖于lxml库,所以之前必须安装好lxml库。
目前最新的版本是4.7.1,下载地址是:https://pypi.org/project/beautifulsoup4/。使用pip直接安装,命令如下:

pip3 install beautifulsoup4

当然我们也可以下载wheel文件进行安装。

安装pyquery

pyquery是一个强大的网页解析工具,提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便。下面介绍它的安装方式。
使用pip安装,命令如下:

pip3 install pyquery

当然也可以下载wheel文件安装,最新版本为1.4.0,下载地址:https://pypi.org/project/pyquery/。使用pip安装即可。

安装tesserocr

在爬虫的过程中,难免会遇到各种各样的验证码,大多数都是图形验证码,需要用OCR进行识别。OCR(Optical Character Recognition),光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。对于图形验证码,都是一些不规则的字符,由字符稍加扭曲变换产生的。tesserocr是python的一个OCR识别库,是对tesseract做的一层python API封装,核心仍是tesseract。所以需要先安装tesseract,再安装tesserocr。下面介绍在三大平台下的安装。

  1. windows下的安装

首先下载tesseract,最新版本4.1.0,下载地址:https://github.com/UB-Mannheim/tesseract/wiki
下载完成后,直接安装即可。安装过程中勾选Additional language data(download)选项来安装OCR识别支持的语言包,这样OCR便可以识别多国语言。
最后使用pip安装tesserocr即可,命令如下:

pip3 install tesserocr pillow

  1. Linux下的安装

对于Linux不同的发行版,有不同的安装包。
Ubuntu/Debian/Deepin
使用apt-get安装,命令如下:

sudo apt-get install -y tesseract-ocr libtesseract-dev libleptonica-dev

CentOS/RedHat
使用yum安装,命令如下:

yum install -y tesseract

上述安装完成之后,便可以使用tesseract命令。
如果需要安装额外的语言包,可从github仓库下载后放到相关目录即可,下载地址为:https://github.com/tesseract-ocr/tessdata
最后,使用pip安装tesserocr即可,命令如下:

pip3 install tesserocr pillow

  1. Mac下的安装

使用Homebrew安装ImageMagick和tesseract库,命令如下:

brew install imagemagick
brew install tesseract –all-languages

然后安装tesserocr即可,命令如下:

pip3 install tesserocr pillow

数据库的安装

作为数据存储的重要部分,数据库同样是必不可少的。
数据库分为关系型数据库和非关系性数据库。关系型数据库包括SQLite/MySQL/Oracle/SQL Server/DB2等,其数据库是以表的形式存储,非关系型数据库如MongoDB/Redis,他们的存储形式是键值对,存储形式更加灵活。我们主要用到的是MySQL和MongoDB/Redis。

安装MySQL

MySQL是一个轻量级的关系型数据库。下面介绍其在三大平台的安装方式。

  1. windows下的安装

直接从官网下载MySQL安装包。下载完成后直接安装即可,安装过程中需要设置数据库root密码,记住密码。安装成功后,可以在“计算机-管理-服务”开启和关闭MySQL服务。

  1. Linux下的安装

Ubuntu/Debian/Deepin
使用apt-get安装MySQL,命令如下:

sudo apt-get update
sudo apt-get install -y mysql-server mysql-client

安装过程中会提示输入用户名、密码,输入即可。
启动、关闭和重启MySQL服务的命令如下:

sudo service mysql start
sudo service mysql stop
sudo service mysql restart

CentOS/RedHat
使用yum安装MySQL,命令如下:

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install -y mysql mysql-server

安装后,初始密码为空。
启动、关闭和重启MySQL服务的命令如下:

sudo systemctl start mysqld
sudo systemctl stop mysqld
sudo systemctl restart mysqld

执行如下命令进入MySQL命令行模式修改密码:

mysql -uroot -p

输入空密码进入MySQL命令行模式,然后:

use mysql;
UPDATE user SET Password = PASSWORD(‘newpass’) WHERE user = ‘root’;
FLUSH PRIVILEGES;

其中newpass为修改的新密码。
为了使Linux上的MySQL服务可以远程访问,我们需要取消限制本地访问。
修改MySQL的配置文件:

vi /etc/mysql/my.cnf

取消下面这一行的注释:
bind-address = 127.0.0.1
修改完成后,重启MySQL服务,就可以远程访问了。

  1. Mac下的安装

使用Homebrew安装,命令如下:

brew install mysql

启动、关闭和重启MySQL服务的命令如下:

sudo mysql.server start
sudo mysql.server stop
sudo mysql.server restart

若想允许远程访问,可参考上述Linux的进行修改。

安装MongoDB

MongoDB是由C++编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。
MongoDB支持多种平台,包括windows、Linux、Mac OS、Solaris等。下面介绍其安装方式。

  1. windows下的安装

直接在官网下载msi格式的安装包即可。
下载完成后,进行安装。安装完成后,在bin目录下新建同级目录data,然后在data文件夹下新建db文件夹存储数据。
然后打开命令行,运行MongoDB服务:

mongod –dbpath “C:\MongoDB\Server\3.4\data\db”

注意将上述路径换位你的MongoDB安装路径。
为了让MongoDB服务能一直在后台运行,需要将其配置为系统服务。
以管理员身份运行命令行,然后在bin目录下新建logs同级目录,在logs目录下新建mongodb.log文件,用于存储MongoDB运行日志。
执行如下命令:

mongod –bind_ip 0.0.0.0 –logpath “C:\MongoDB\Server\3.4\logs\mongodb.log” –logappend –dbpath “C:\MongoDB\Server\3.4\data\db” –port 27017 –serviceName “MongoDB” –serviceDisplayName “MongoDB” –install

上述命令的意思是绑定IP为0.0.0.0(即任意IP均可访问),指定日志路径、数据库路径和端口,指定服务名称。注意路径依然是你的MongoDB安装路径。
至此,MongoDB服务就被成功配置成系统服务了,后面直接用mongo命令进入MongoDB交互式环境。

  1. Linux下的安装

Ubuntu
首先导入MongoDB的GPG key:

sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 0C49F3730359A14518585931BC711F9BA15703C6

然后创建apt-get源列表,不同版本系统对应的命令如下:
Ubuntu12.04

echo “deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.4 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

Ubuntu14.04

echo “deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

Ubuntu16.04

echo “deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

然后更新apt-get源:

sudo apt-get update

然后安装MongoDB:

sudo apt-get install -y mongodb-org

安装完成后运行MongoDB:

mongod –port 27017 –dbpath /data/db

运行上述命令后,MongoDB就在27017端口运行,数据文件保存在/data/db路径下。
配置MongoDB的远程连接:

mongo –port 27017

进入MongoDB命令行:

use admin
switched to db admin
db.createUser({user: ‘admin’, pwd: ‘admin123’, roles: [{role: ‘root’, db: ‘admin’}]})
Successfully added user: {
“user” : “admin”,
“roles” : [
{
“role” : “root”,
“db” : “admin”
}
]
}

这样就创建了一个用户名为admin,密码为admin123的用户,赋予其root权限。
然后修改MongoDB的配置文件,执行如下命令:

sudo vi /etc/mongod.conf

修改net部分:

net:
port: 27017
bindIp: 0.0.0.0

添加权限认证配置,添加如下配置:

security:
authorization: enabled

最后,重启MongoDB服务使上述配置生效。
CentOS/RedHat
首先添加MongoDB源:

sudo vi /etc/yum.repos.d/mongodb-org.repo

修改如下配置并保存:

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

使用yum命令安装:

sudo yum install mongodb-org

启动、关闭和重新加载MongoDB服务的命令如下:

sudo syetemctl start mongod
sudo syatemctl stop mongod
sudo systemctl reload mongod

远程连接和权限认证的配置参考前述。

  1. Mac下的安装

使用Homebrew安装:

brew install mongod

然后创建一个新文件夹/data/db,用于存储MongoDB数据。
启动、停止和重启MongoDB服务的命令如下:

sudo syetemctl start mongod
sudo syatemctl stop mongod
sudo systemctl restart mongod

推荐两个MongoDB可视化工具RodoMongo/Rodo 3TStudio 3T

安装Redis

Redis是一个基于内存的高效的非关系型数据库。下面介绍一下三大平台的安装方式。

  1. windows下的安装

直接到Github的发行版本里面下载,下载地址为:https://github.com/microsoftarchive/redis/releases
选择msi格式的安装包下载,然后按照提示安装即可。安装成功后,Redis服务就会出现在系统服务里面。
还可下载Redis Desktop Manager可视化管理工具,来管理Redis。
官方下载地址:https://redisdesktop.com/download
Github项目地址:https://github.com/uglide/RedisDesktopManager/releases

  1. Linux下的安装

Ubuntu/Debian/Deepin
使用apt-get安装,命令如下:

sudo apt-get -y install redis-server

然后执行redis-cli进入Redis命令行模式:

$ redis-cli
127.0.0.1:6379> set ‘name’ ‘Germey’
OK
127.0.0.1:6379> get ‘name’
“Germey”

上述执行则说明安装成功。
当然还需要配置Redis远程连接,需要修改/etc/redis/redis.conf配置文件。
首先注释下面这行:

bind 127.0.0.1

设置Redis密码,取消注释下面这行:

requirepass foobared

foobared即当前密码,可自行修改。
然后重启Redis服务使配置生效:

sudo /etc/init.d/redis-server restart

另,启动和停止Redis服务的命令如下:

sudo /etc/init.d/redis-server stop
sudo /etc/init.d/redis-server start

CentOS和RedHat
首先需要添加EPEL仓库,然后更新yum源:

sudo yum install epel-release
sudo yum update

安装Redis数据库:

sudo yum -y install redis

安装好后启动Redis服务即可:
sudo systemctl start redis
同样可以使用redis-cli进入Redis命令行模式。
配置远程连接需要修改/etc/redis.conf文件,参考前述。
重启和停止Redis服务,命令如下:

sudo systemctl restart redis
sudo systemctl stop redis

  1. MAC下的安装

使用Homebrew安装,命令如下:

brew install redis

启动Redis服务的命令如下:

brew services start redis
redis-server /usr/local/etc/redis.conf

同样使用redis-cli进入Redis命令行模式。
Mac下Redis的配置文件是/usr/local/etc/redis.conf,修改这个文件来配置访问密码。然后重启服务。
重启和停止Redis服务的命令是:

brew services restart redis
brew services stop redis

Mac下也可安装Redis Desktop Manager可视化管理工具来管理Redis。

存储库的安装

前面介绍了数据库的安装,数据库提供了存储数据的服务,但是想要与python交互的话,还需要安装一些python存储库,如MySQL需要PyMySQL,MongoDB需要安装PyMongo等。

安装PyMySQL

想要将数据存储到MySQL中,需要借助PyMySQL来操作。
使用pip安装,命令如下:

pip3 install pymysql

执行以下命令验证安装是否成功:

$ python3

import pymysql
pymysql.VERSION
(0, 7, 11, None)

如果出现上述结果,则证明安装成功。

安装PyMongo

想要将数据存储到MongoDB中,需要借助PyMongo库。
使用pip安装,命令如下:

pip3 install pymongo

执行以下命令验证安装是否成功:

$ python3

import pymongo
pymongo.version
‘3.4.0’

如果出现上述结果,则证明安装成功。

安装redis-py

对于redis来说,需要借助redis-py库。
使用pip安装,命令如下:

pip3 install redis

执行以下命令验证安装是否成功:

$ python3

import redis
redis.VERSION
(2, 10, 5)

如果出现上述结果,则证明安装成功。

安装RedisDump

RedisDump是一个用于Redis数据导入、导出的工具,基于Ruby实现,所以需要先安装Ruby。
对于Ruby的安装,可参考Ruby社区的安装文档
Ruby安装成功后,就可以执行gem命令来安装RedisDump。

gem install redis-dump

安装成功后,就可以执行如下两个命令:

redis-dump
redis-load

如果可以成功调用,则证明安装成功。

Web库的安装

网站都是由Web服务程序搭建而成的,python中有一些Web服务程序,比如Flask/Django等,可以用来开发网站和接口。这里,我们主要用来搭建一些API接口用于爬虫。我们主要用到的Web服务程序有Flask和Tornado。下面介绍它们的安装方式。

安装Flask

Flask是一个轻量级的Web服务程序,它简单、易用、灵活。
使用pip安装,命令如下:

pip3 install flask

安装完成后,可以写一段代码来测试一下:

1
2
3
4
5
6
7
8
9
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello World!"

if __name__ == "__main__":
app.run()

运行后,系统会在5000接口开启Web服务,控制台输出如下:

访问http://127.0.0.1:5000/,观察到网页中显示Hello World。一个简单的Flask程序就运行成功了。

安装Tornado

Tornado是一个支持异步的Web框架,通过使用非阻塞I/O流,可支撑成千上万的开放连接,效率非常高。
使用pip安装,命令如下:

pip3 install tornado

安装完成后,可以写一段代码来测试一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")

def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])

if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()

运行后,系统会在8888端口运行Web服务,控制台没有输出内容,访问http://127.0.0.1:8888/,可以观察到网页中显示Hello, world。

App爬取库的安装

除了Web网页外,爬虫还可以爬取App的数据。App中的页面要加载出来,首先需要获取数据,而这些数据一般是通过请求服务器的接口来获取的。由于App没有浏览器这种可以比较直观地看到后台请求的工具,所以主要用一些抓包技术来抓取数据。抓包工具有Charles、mitmproxy和mitmdump。一些简单的接口可以通过Charles或mitmproxy分析,找出规律,然后直接用程序模拟来抓取了。但是如果遇到更复杂的接口,就需要利用mitmdump对接Python来对抓取到的请求和响应进行实时处理和保存。另外,既然要做规模采集,就需要自动化App的操作而不是人工去采集,所以这里还需要一个工具叫作Appium,它可以像Selenium一样对App进行自动化控制,如自动化模拟App的点击、下拉等操作。下面介绍它们的安装方式。

安装Charles

Charles是一个网络抓包工具,相比Fiddler,功能更为强大,支持跨平台,这里将其作为主要的移动端抓包工具。
官网下载最新的稳定版本。Charles是收费软件,可免费试用30天,如果试用期过了,其实还可以试用,不过每次试用不能超过30分钟,启动有10秒的延时,但是完整的软件功能还是可以使用的,所以还算比较友好。
现在很多网页都支持HTTPS,HTTPS协议的使用将会越来越广泛。如果一个APP使用了HTTPS协议通信,那么其通信数据将会是加密的,常规的抓包方法无法解密数据。所以,需要配置相关的SLL证书。下面介绍各个平台的证书配置过程。
Charles运行在PC端,要抓取的是APP中的数据,所以在PC端和手机端都需要配置证书。

  1. windows

打开Charles,点击“Help-SSL Proxying-Install Charles Root Certificate”,进入证书的安装页面。
弹出一个安装证书的页面。点击“安装证书”,打开证书导入向导。选择证书的存储区域为“将所有的证书放入下列存储”,然后点击“浏览”,从中选择证书存储位置为“受信任的根证书颁发机构”,点击“确定”,点击“下一步”完成安装。

  1. Mac

打开Charles,点击“Help-SSL Proxying-Install Charles Root Certificate”,进入证书的安装页面。
找到Charles的证书并双击,将“信任”设置为“始终信任”即可。

  1. IOS

首先查看电脑的Charles代理是否开启,具体操作是点击Proxy-Proxy Settings,打开代理设置页面,确保当前的HTTP代理是开启的。代理端口为8888,可自行修改。
接下来,将手机和电脑连在同一个局域网下。例如,当前电脑的IP为192.168.1.76,那么首先设置手机的代理为192.168.1.76:8888。
设置完毕后,电脑会出现一个提示窗口,询问是否信任此设备。点击Allow,这样手机和电脑就在同一局域网了,设置了Charles的代理,就可以抓取App的数据包了。
下面安装Charles的HTTPS证书。
电脑上打开Help-SSL Proxying-Install Charles Root Certificate on a Mobile Device or Remote Browser。
弹窗提示,点击OK即可。提示我们在手机上设置好了Charles的代理,然后在手机浏览器打开chls.pro/ssl下载证书并按照提示安装。
如果你的IOS版本在10.3以下,信任CA证书的流程已经完成了。
如果IOS版本是10.3及以上,还需要在“设置-通用-关于本机-证书信任设置”中将证书的完全信任打开。

  1. Android

在Android系统中,同样需要设置代理为Charles的代理。设置完毕后,电脑上弹窗提示,询问是否信任此设备。直接点击Allow即可。然后同样打开chls.pro/ssl下载证书并按照提示安装。

安装mitmporxy

mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler/Charles的功能,只不过它通过控制台的形式操作。
mitmproxy还有两个关联组件,一个是mitmdump,它是mitmproxy的命令行接口,利用它可以对接Python脚本,实现监听后的处理;另一个是mitmweb,它是一个Web程序,通过它可以清楚地观察到mitmproxy捕获的请求。
下面介绍一下它们的安装方式。

  1. 最简单有效的安装方式

使用pip安装,命令如下:

pip3 install mitmproxy

执行完毕后,安装了mitmproxy,还附带安装了mitmdump和mitmweb这两个组件。

  1. windows下的安装

在Github项目地址获取安装包。最新版本是4.0.4,下载windows平台的安装包安装即可。需要注意的是,在windows上不支持mitmproxy的控制台窗口,但是可以使用mitmdump和mitmweb。

  1. Linux下的安装

可以在上面提到的项目地址下载编译好的二进制包,包含了最新版本的mitmproxy和内置的Python3环境以及最新的OpenSSL环境。
下载之后,需要将其解压并配置到环境变量:

tar -zxvf mitmproxy-4.0.4-linux.tar.gz
sudo mv mitmproxy mitmdump mitmweb /usr/bin

这就将3个可执行文件移动到了/usr/bin目录下。一般情况下,/usr/bin目录配置在了环境变量下。

  1. Mac下的安装

使用Homebrew安装,命令如下:

brew install mitmproxy

  1. Docker安装

mitmproxy也支持Docker,其DockerHub地址为:https://hub.docker.com/r/mitmproxy/mitmproxy/
安装命令为:

docker run –rm -it -p 8080:8080 mitmproxy/mitmproxy mitmdump

这样就在8080端口上启动了mitmproxy和mitmdump。
如果想要获取CA证书,可以选择挂载磁盘选项,命令如下:

1
docker run --rm -it -v ~/.mitmproxy:/home/mitmproxy/.mitmproxy -p 8080:8080 mitmproxy/mitmproxy mitmdump

这样就可以在~/.mitmproxy目录下找到CA证书。
另外,还可以在8081端口上启动mitmweb,命令如下:

1
docker run --rm -it -p 8080:8080 -p 127.0.0.1:8081:8081 mitmproxy/mitmproxy mitmweb

配置证书
对于mitmproxy来说,如果想要截获HTTPS请求,就需要设置证书。mitmproxy在安装后会提供一套CA证书,只要客户端信任了mitmproxy提供的证书,就可以通过mitmproxy获取HTTPS请求的具体内容,否则mitmproxy是无法解析HTTPS请求的。
首先,运行以下命令产生CA证书,并启动mitmdump:

mitmdump

这样,我们就可以在用户目录下的.mitmproxy目录找到CA证书。
证书一共五个,如下表所示。

名称 描述
mitmproxy-ca.pem PEM格式的证书私钥
mitmproxy-ca-cert.pem PEM格式证书,适用于大多数非Windows平台
mitmproxy-ca-cert.p12 PKCS12格式的证书,适用于Windows平台
mitmproxy-ca-cert.cer 与mitmproxy-ca-cert.pem相同,只是改变了后缀,适用于部分Android平台
mitmproxy-dhparam.pem PEM格式的秘钥文件,用于增强SSL安全性

下面介绍一下各个平台下证书的配置。

  1. windows

双击mitmproxy-ca.p12,就会出现导入证书的向导窗口。
按照提示导入即可,中间需要设置密码用于保护私钥,选择证书的存储区域时选择“将所有的证书都放入下列存储”,点击浏览按钮,选择证书存储位置为“受信任的根证书颁发机构”,然后确定。后面如果弹出安全警告,选择是即可。

  1. Mac

Mac下双击mitmproxy-ca-cert.pem即可弹出钥匙串管理页面,找到mitmproxy证书,打开设置,选择“始终信任”即可。

  1. IOS

将mitmproxy-ca-cert.pem文件发送到iPhone上,推荐使用邮件方式发送,然后在iPhone上可以直接点击附件并识别安装。忽略安全提示,一直点安装即可。
如果你的iOS版本是10.3以下的话,此处信任CA证书的流程就已经完成了。
如果你的iOS版本是10.3及以上版本,还需要在“设置”→“通用”→“关于本机”→“证书信任设置”将mitmproxy的完全信任开关打开。

  1. Android

将mitmproxy-ca-cert.pem文件发送到手机上,点击证书安装,为证书命名,点确定完成安装。

安装Appium

Appium是移动端的自动化测试工具,类似于前面说的Selenium,利用它驱动Android/IOS等设备完成自动化测试,比如模拟点击、滑动、输入等操作。下面介绍其安装方式。
Appium负责驱动移动端来完成一系列操作,对于IOS设备来说,它使用苹果的UIAutomation来实现驱动,对于Android来说,他使用UIAutomator和Selendroid来实现驱动。Appium相当于一个服务器,可以向它发送一些指令,然后它会根据不同的指令对移动设备进行驱动,以完成不同的动作。
Appium有两种安装方式。

  1. Appium Desktop

Appium Desktop支持全平台的安装,从Github项目地址下载安装包。最新版本是1.13.0。根据不同的平台,下载对应的安装包安装即可。

  1. Node.js安装

首先安装Node.js,具体的安装方式不再赘述。安装完成之后,可以使用npm命令。
使用npm命令全局安装Appium即可:

npm install -g appium

Android开发环境配置
如果我们要使用Android设备做App抓取的话,还需要下载和配置Android SDK,这里推荐直接安装Android Studio,其下载地址为https://developer.android.com/studio/index.html?hl=zh-cn。下载后直接安装即可。
然后,我们还需要下载Android SDK。直接打开首选项里面的Android SDK设置页面,勾选要安装的SDK版本,点击OK按钮即可下载和安装勾选的SDK版本。
另外,还需要配置一下环境变量,添加ANDROID_HOME为Android SDK所在路径,然后再添加SDK文件夹下的tools和platform-tools文件夹到PATH中。
详细安装配置可参考官方文档

IOS开发环境配置
首先需要声明的是,Appium是一个做自动化测试的工具,用它来测试我们自己开发的App是完全没问题的,因为它携带的是开发证书(Development Certificate)。但如果我们想拿iOS设备来做数据爬取的话,那又是另外一回事了。一般情况下,我们做数据爬取都是使用现有的App,在iOS上一般都是通过App Store下载的,它携带的是分发证书(Distribution Certificate),而携带这种证书的应用都是禁止被测试的,所以只有获取ipa安装包再重新签名之后才可以被Appium测试,具体的方法这里不再展开阐述。
这里推荐直接使用Android来进行测试。如果你可以完成上述重签名操作,那么可以参考如下内容配置iOS开发环境。
Appium驱动iOS设备必须要在Mac下进行,Windows和Linux平台是无法完成的,所以下面介绍一下Mac平台的相关配置。
Mac平台需要的配置如下:

  • macOS 10.12及更高版本
  • XCode 8及更高版本

配置满足要求之后,执行如下命令即可配置开发依赖的一些库和工具:

xcode-select –install

这样iOS部分的开发环境就配置完成了,我们就可以用iOS模拟器来进行测试和数据抓取了。
如果想要用真机进行测试和数据抓取,还需要额外配置其他环境,具体可以参考https://github.com/appium/appium/blob/master/docs/en/appium-setup/real-devices-ios.md

爬虫框架的安装

主要介绍的爬虫框架有pyspider和Scrapy。

安装pyspider

pyspider是国人binux编写的强大的网络爬虫框架,拥有强大的WebUI、脚本编辑器、任务监控器、项目管理器以及结果处理器,同时支持多种数据库后端、多种消息队列,另外还支持JavaScript渲染页面的爬取,使用起来非常方便。
pyspider是支持JavaScript渲染的,依赖于PhantomJS,所以需要先安装PhantomJS。
使用pip安装,命令如下:

pip3 install pyspider

安装过程,可能会出现如下错误提示:

Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build-vXo1W3/pycurl

这是PyCurl安装错误,需要安装PyCurl。下载PyCurl的wheel文件安装。下载地址:https://pypi.org/project/pycurl/
然后用pip安装即可。
验证安装
在命令行启动pyspider:

pyspider all

这时pyspider的Web服务就会在本地5000端口运行。在浏览器打开http://localhost:5000/,即可进入pyspider的WebUI管理界面。

安装Scrapy

Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted14.0/Lxml3.4/pyOpenSSL0.1.4。在不同的平台环境,依赖的库也各不相同。
下面介绍Scrapy在不同平台的安装方式。
Anaconda安装
这是一种比较简单的安装Scrapy的方法,尤其是对于windows。如果你的Python是使用Anaconda安装的、或者还没有安装Python的话,可使用此方法安装,简单省事。
如果已经安装好了Anaconda,那么可以通过conda命令安装Scrapy。命令如下:

conda install Scrapy

如果不是使用Anaconda安装的Python,可以按照下面的方法一步步安装Scrapy。

  1. windows下的安装

安装lxml,这个必须安装,参考前面写的。
安装pyOpenSSL
官方网站下载wheel文件,下载完成后利用pip安装即可。
安装Twisted
下载地址:https://pypi.org/project/Twisted/,最新版本为19.2.0。下载完成后使用pip安装即可。
安装PyWin32
下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/。下载完成安装即可。
安装Scrapy
安装好了上述依赖库后,使用pip安装Scrapy即可。

  1. Linux下的安装

CentOS/RedHat
首先确保一些依赖库已经安装。运行如下命令:

sudo yum groupinstall -y development tools
sudo yum install -y epel-release libxslt-devel libxml2-devel openssl-devel

然后使用pip安装Scrapy:

pip3 install Scrapy

Ubuntu/Debian/Deepin
首先确保一些依赖库已经安装。运行如下命令:

sudo apt-get install build-essential python3-dev libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev

然后使用pip安装Scrapy:

pip3 install Scrapy

  1. Mac下的安装

首先进行依赖库的安装,构建Scrapy的依赖库需要C编译器以及开发头文件。一般由Xcode提供,命令如下:

xcode-select –install

然后使用pip安装Scrapy即可:

pip3 install Scrapy

常见错误:
在安装过程中,常见的错误汇总如下:
pkg_resources.VersionConflict: (six 1.5.2 (/usr/lib/python3/dist-packages), Requirement.parse(‘six>=1.6.0’))
这个错误是six包版本过低出现的错误。six包是一个提供兼容python2和python3的库,升级six版本即可解决:

sudo pip3 install -U six

c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory
这是在Linux下常出现的错误,缺少libffi库造成的。什么是libffi?FFI的全名是Foreign Function Interface,通常指的是允许以一种语言编写的代码调用另一种语言的代码。而libffi库只提供了最底层的、与架构相关的、完整的FFI。此时安装相应的库即可。
在Ubuntu/Debian下,直接执行如下命令即可:

sudo apt-get install build-essential libssl-dev libffi-dev python3-dev

在CentOS/RedHat下,直接执行如下命令即可:

sudo yum install gcc libffi-devel python-devel openssl-devel

Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build/cryptography/
这是缺少加密的相关组件,使用pip安装即可。

pip3 install cryptography

ImportError: No module named ‘packaging’
这是因为缺少packaging包出现的错误,这个包提供了Python包的核心功能,此时利用pip安装即可。

pip3 install packaging

ImportError: No module named ‘_cffi_backend’
这个错误表示缺少cffi包,直接使用pip安装即可:

pip3 install cffi

ImportError: No module named ‘pyparsing’
这个错误表示缺少pyparsing包,直接使用pip安装即可:

pip3 install pyparsing appdirs

安装Scrapy-Splash

Scrapy-Splash是一个Scrapy中支持JavaScript渲染的工具。Scrapy-Splash的安装分为两部分,一个是Splash服务的安装,具体是通过Docker,安装之后,会启动一个Splash服务,我们可以通过它的端口来实现JavaScript页面的加载,另外一个是Scrapy-Splash的Python库的安装,安装之后即可在Scrapy中使用Splash服务。

安装Splash
Scrapy-Splash会使用Splash的HTTP API进行页面渲染,所以我们需要安装Splash来提供渲染服务。这里通过Docker安装。安装命令如下:

docker run -p 8050:8050 scrapinghub/splash

成功后,Splash已经在8050端口上运行,打开http://localhost:8050,即可看到Splash主页。
当然,Splash也可以直接安装在远程服务器上,我们在服务器上以守护态运行Splash即可。命令如下:

docker run -d -p 8050:8050 scrapinghub/splash

这里的-d参数,代表Docker容器以守护态运行,这样在中断远程服务器连接后,不会终止Splash服务的运行。

安装Scrapy-Splash
成功安装Splash之后,接下来再来安装其Python库,命令如下:

pip3 install scrapy-splash

安装Scrapy-Redis

Scrapy-Redis是Scrapy的分布书扩展模块,有了它,我们就可以方便地实现Scrapy分布式爬虫的搭建。
推荐使用pip安装,命令如下:

pip3 install scrapy-redis

也可下载wheel文件安装,下载地址:https://pypi.org/project/scrapy-redis/#description,最新版本为0.6.8,然后使用pip安装即可。

部署相关库的安装

想要实现大规模抓取数据,那么一定会用到分布式爬虫。对于分布式爬虫,需要多台主机,每台主机多个爬虫任务,但源代码其实只有一份,需要将这一份源代码同时部署到多台主机上来协同运行。对于Scrapy来说,有一个扩展组件,叫做Scrapyd,我们只需要安装该扩展组件,即可远程管理Scrapy任务,包括部署源码、启动任务、监听任务等。另外,还有Scrapyd-Client和Scrapyd API来帮助我们更方便地完成部署和监听操作。还有另外的一种部署方式,那就是Docker集群部署。只需要将爬虫制作为Docker镜像,只要主机安装了Docker,就可以直接运行爬虫,而无需再去担心环境配置、版本问题。

安装Docker

Docker是一种容器技术,可以将应用和环境等进行打包,形成一个独立的、类似于IOS的App形式的“应用”。这个应用可以直接被分发到任意一个支持Docker的环境中,通过简单的命令即可启动运行。Docker是一种最流行的容器化实现方案,和虚拟化技术类似,它极大地方便了应用服务的部署;又与虚拟化技术不同,它以一种更轻量的方式实现了应用服务的打包。使用Docker,可以让每个应用彼此相互隔离,在同一台机器上同时运行多个应用,不过它们彼此之间共享同一个操作系统。Docker的优势在于,它可以在更细的粒度进行资源管理,也比虚拟化技术更加节约资源。下面介绍三大平台下Docker的安装方式。

  1. windows下的安装

如果是Windows10 64位,推荐使用Docker for Windows,此时直接从Docker官方网站下载最新的Docker for windows安装包。
如果不是Windows10 64位,则可以下载Docker Toolbox
下载完成后直接安装即可。

  1. Linux下的安装

详细的安装说明可以参考官方文档。除了官方文档的详细安装步骤说明。Docker官方还提供了一键安装脚本,方便快捷,一步到位。
官方安装脚本,安装命令如下:

curl -sSL https://get.docker.com/ | sh

由于众所周知的原因,使用官方脚本可能会很慢。所以推荐使用国内的镜像来安装。
阿里云的安装脚本,命令如下:

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

DaoCloud的安装脚本,命令如下:

curl -sSL https://get.daocloud.io/docker | sh

  1. Mac下的安装

Mac平台同样有两种选择:Docker for Mac和Docker Toolbox。
Docker for Mac要求系统为OS X EI Captain 10.11或更新,至少4GB内存,满足此要求,推荐使用Docker for Mac。
可以使用Homebrew安装,命令如下:

brew cask install docker

也可以手动下载安装包安装。
如果系统不满足要求,可以下载Docker Toolbox
镜像加速
为了提高镜像的下载速度,可以使用国内镜像来加速。推荐的有DaoCloud阿里云。不同平台的镜像加速方法配置可以参考DaoCloud的官方文档

安装Scrapyd

Scrapyd是一个用于部署和运行Scrapy项目的工具,有了它,你可以将写好的Scrapy项目上传到云主机并通过API来控制它的运行。下面主要介绍在linux下的部署。
推荐使用pip安装,命令如下:

pip3 install scrapyd

安装完毕后,需要新建一个配置文件/etc/scrapyd/scrapyd.conf,Scrapyd在运行的时候会读取此配置文件。
在Scrapyd1.2版本之后,不会自动创建该文件,需要手动添加。
首先新建文件:

sudo mkdir /etc/scrapyd
sudo vi /etc/scrapyd/scrapyd.conf

写入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[scrapyd]
eggs_dir = eggs
logs_dir = logs
items_dir =
jobs_to_keep = 5
dbs_dir = dbs
max_proc = 0
max_proc_per_cpu = 10
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0
http_port = 6800
debug = off
runner = scrapyd.runner
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
webroot = scrapyd.website.Root

[services]
schedule.json = scrapyd.webservice.Schedule
cancel.json = scrapyd.webservice.Cancel
addversion.json = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json = scrapyd.webservice.ListSpiders
delproject.json = scrapyd.webservice.DeleteProject
delversion.json = scrapyd.webservice.DeleteVersion
listjobs.json = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus

配置文件的内容可以参见官方文档https://scrapyd.readthedocs.io/en/stable/config.html#example-configuration-file。这里的配置文件有所修改,其中之一是max_proc_per_cpu官方默认为4,即一台主机每个CPU最多运行4个Scrapy任务,在此提高为10。另外一个是bind_address,默认为本地127.0.0.1,在此修改为0.0.0.0,以使外网可以访问。
Scrapyd是一个纯Python项目,可以直接调用运行。
Linux和Mac下使其后台运行,命令如下:

(scrapyd > /dev/null &)

记录输出日志,命令如下:

(scrapyd > ~/scrapyd.log &)

运行之后,便可以在浏览器的6800端口访问Web UI,从中可以看到当前Scrapyd的运行任务、日志等内容。
当然,运行Scrapyd更佳的方式是使用Supervisor守护进程,参考文档:http://supervisord.org/
Scrapyd还支持Docker。
配置完成之后,Scrapyd和它的接口都是可以公开访问的。如果想配置访问认证的话,可以借助于Nginx做反向代理,需要先安装Nginx服务器。
以Ubuntu为例说明,安装命令如下:

sudo apt-get install nginx

修改Nginx的配置文件nginx.conf,增加如下配置:

1
2
3
4
5
6
7
8
9
10
http {
server {
listen 6801;
location / {
proxy_pass http://127.0.0.1:6800/;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
}
}

这里使用的用户名和密码配置在/etc/nginx/conf.d目录下,使用htpasswd命令创建。例如,创建一个用户名为admin的文件,命令如下:

htpasswd -c .htpasswd admin

接着就会提示我们输入密码,输入两次之后,就会生成密码文件。此时查看这个文件的内容:

cat .htpasswd
admin:5ZBxQr0rCqwbc

配置完成后,重启一下Nginx服务,运行如下命令:

sudo nginx -s reload

这样就成功配置了Scrapyd的访问认证了。

安装Scrapyd-client

在将Scrapy代码部署到远程Scrapyd的时候,第一步就是将代码打包为EGG文件,其次需要将EGG文件上传到远程主机。这个过程如果用程序来实现,是完全可行的,但其实Scrapyd-client已经为我们实现了这些功能。
推荐使用pip安装,命令如下:

pip3 install scrapyd-client

安装Scrapyd API

安装好了Scrapyd之后,可以直接请求他提供的API来获取当前主机的Scrapy任务运行状况。比如,某台主机的IP为192.168.1.1,则可以直接运行如下命令获取当前主机的所有Scrapy项目。

curl http://localhost:6800/listprojects.json

运行结果如下:

{“status”: “ok”, “projects”: [“myproject”, “otherproject”]}

返回的是JSON字符串,解析它,可以得到当前主机的所有项目。
上面还是略显繁琐,所以Scrapyd API就为它做了一层封装,下面看一下它的安装方式。
推荐使用pip安装,命令如下:

pip install python-scrapyd-api

安装完成之后,便可以使用Python来获取主机状态了,所以上面的操作便可以用Python代码实现:

1
2
3
from scrapyd_api import ScrapydAPI
scrapyd = ScrapydAPI('http://localhost:6800')
print(scrapyd.list_projects())

运行结果如下:

[“myproject”, “otherproject”]

安装Scrapyrt

Scrapyrt为Scrapy提供了一个调度的HTTP接口,有了它,我们就不需要再执行Scrapy命令而是通过请求一个HTTP接口调度Scrapy任务了。Scrapyrt比Scrapyd更轻量,如果不需要分布式多任务的话,可以简单使用Scrapyrt实现远程Scrapy任务的调度。
推荐使用pip安装,命令如下:

pip3 install scrapyrt

在任意一个Scrapy项目中运行如下命令来启动HTTP服务:

scrapyrt

运行之后,会默认在9080端口上启动服务,类似的输出结果如下:

1
2
3
4
scrapyrt
2017-07-12 22:31:03+0800 [-] Log opened.
2017-07-12 22:31:03+0800 [-] Site starting on 9080
2017-07-12 22:31:03+0800 [-] Starting factory <twisted.web.server.Site object at 0x10294b160>

如果想更换运行端口,可以使用-p参数,如:

scrapyrt -p 9081

另外,Scrapyrt也支持Docker。比如,想要在9080端口上运行,且本地Scrapy项目的路径为/home/quotesbot,可以使用如下命令:

docker run -p 9080:9080 -tid -v /home/user/quotesbot:/scrapyrt/project scrapinghub/scrapyrt

这样就在9080端口上监听指定的Scrapy项目。

安装Gerapy

Gerapy是一个Scrapy分布式管理模块。
使用pip安装,命令如下:

pip3 install gerapy

至此,需要用到的工具和类库安装完毕。