第 1 章 开发环境配置

第 1 章 开发环境配置

工欲善其事,必先利其器!

编写和运行程序之前,我们必须先把开发环境配置好。只有配置好了环境并且有了更方便的开发工具,我们才能更加高效地用程序实现相应的功能。然而很多情况下,我们可能在最开始就卡在环境配置上,如果这个过程花费了太多时间,学习的兴趣可能就下降了大半,所以本章专门对本书中所有的环境配置做一下说明。

本章将讲解书中使用的所有库及工具的安装过程。为了使书的条理更加清晰,本书将环境配置的过程统一合并为一章。本章不必逐节阅读,可以在需要的时候查阅。

在介绍安装过程时,我们会尽量兼顾各个平台。另外,书中也会指出一些常见的安装错误,以便快速高效地搭建好编程环境。

1.1 Python 3的安装

既然要用Python 3开发爬虫,那么第一步一定是安装Python 3。这里会介绍Windows、Linux和Mac三大平台下的安装过程。相关链接如下。

1.1.1 Windows下的安装

在Windows下安装Python 3的方式有两种。

  • 一种是通过Anaconda安装,它提供了Python的科学计算环境,里面自带了Python以及常用的库。如果选用了这种方式,后面的环境配置方式会更加简便。
  • 另一种是直接下载安装包安装,即标准的安装方式。

下面我们依次介绍这两种安装方式,任选其一即可。

  1. Anaconda安装

    Anaconda的官方下载链接为https://www.anaconda.com/download,选择Python 3版本的安装包下载即可,如图1-1所示。

    图1-1 Anaconda Windows下载页面

    如果下载速度过慢,可以选择使用清华大学镜像,下载列表链接为https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/,使用说明链接为https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/

    下载完成之后,直接双击安装包安装即可。安装完成之后,Python 3的环境就配置好了。

  2. 安装包安装

    我们推荐直接下载安装包来安装,此时可以直接到官方网站下载Python 3的安装包:https://www.python.org/downloads/

    写书时,Python的最新版本1是3.6.2,其下载链接为https://www.python.org/downloads/release/python-362/,下载页面如图1-2所示。需要说明的是,实际的Python最新版本以官网为准。

    {%}

    图1-2 Python下载页面

    64位系统可以下载Windows x86-64 executable installer,32位系统可以下载Windows x86 executable installer。

    下载完成之后,直接双击Python安装包,然后通过图形界面安装,接着设置Python的安装路径,完成后将Python 3和Python 3的Scripts目录配置到环境变量即可。

    关于环境变量的配置,此处以Windows 10系统为例进行演示。

    假如安装后的Python 3路径为C:\Python36,从资源管理器中打开该路径,如图1-3所示。

    {%}

    图1-3 Python安装目录

    将该路径复制下来。

    随后,右击“计算机”,从中选择“属性”,此时将打开系统属性窗口,如图1-4所示。

    {%}

    图1-4 系统属性

    点击左侧的“高级系统设置”,即可在弹出的对话框下方看到“环境变量”按钮,如图1-5所示。

    {%}

    图1-5 高级系统设置

    点击“环境变量”按钮,找到系统变量下的Path变量,随后点击“编辑”按钮,如图1-6所示。

    {%}

    图1-6 环境变量

    随后点击“新建”,新建一个条目,将刚才的C:\Python36复制进去。这里需要说明的是,此处的路径就是你的Python 3安装目录,请自行替换。然后,再把C:\Python36\Scripts路径复制进去,如图1-7所示。

    {%}

    图1-7 编辑环境变量

    最后,点击“确定”按钮即可完成环境变量的配置。

    配置好环境变量后,我们就可以在命令行中直接执行环境变量路径下的可执行文件了,如pythonpip等命令。

  3. 添加别名

    上面这两种安装方式任选其一即可完成安装,但如果之前安装过Python 2的话,可能会导致版本冲突问题,比如在命令行下输入python就不知道是调用的Python 2还是Python 3了。为了解决这个问题,建议将安装目录中的python.exe复制一份,命名为python3.exe,这样便可以调用python3命令了。实际上,它和python命令是完全一致的,这样只是为了可以更好地区分Python版本。当然,如果没有安装过Python 2的话,也建议添加此别名,添加完毕之后的效果如图1-8所示。

    {%}

    图1-8 添加别名

    对于pip来说,安装包中自带了pip3.exe可执行文件,我们也可以直接使用pip3命令,无需额外配置。

  4. 测试验证

    安装完成后,可以通过命令行测试一下安装是否成功。在“开始”菜单中搜索cmd,找到命令提示符,此时就进入命令行模式了。输入python,测试一下能否成功调用Python。如果添加了别名的话,可以输入python3测试。这里输入的是python3,测试结果如图1-9所示。

    {%}

    图1-9 测试验证页面

    输出结果类似如下:

    $ python3
    Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> print('Hello World')
    Hello World
    >>> exit()
    $ pip3 -V
    pip 9.0.1 from c:\python36\lib\site-packages (python 3.6)

    如果出现了类似上面的提示,则证明Python 3和pip 3均安装成功;如果提示命令不存在,那么请检查下环境变量的配置情况。

1若无特别说明,书中的最新版本均为作者写书时的情况,后面不再一一说明。

1.1.2 Linux下的安装

Linux下的安装方式有多种:命令安装、源码安装和Anaconda安装。

使用源码安装需要自行编译,时间较长。推荐使用系统自带的命令或Anaconda安装,简单、高效。这里分别讲解这3种安装方式。

  1. 命令行安装

    不同的Linux发行版本的安装方式又有不同,在此分别予以介绍。

    • CentOS、Red Hat

      如果是CentOS或Red Hat版本,则使用yum命令安装即可。

      下面列出了Python 3.5和Python 3.4两个版本的安装方法,可以自行选择。

      Python 3.5版本:

      sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
      sudo yum update
      sudo yum install -y python35u python35u-libs python35u-devel python35u-pip

      执行完毕后,便可以成功安装Python 3.5及pip 3了。

      Python 3.4版本:

      sudo yum groupinstall -y development tools
      sudo yum install -y epel-release python34-devel  libxslt-devel libxml2-devel openssl-devel
      sudo yum install -y python34
      sudo yum install -y python34-setuptools
      sudo easy_install-3.4 pip

      执行完毕后,便可以成功安装Python 3.4及pip 3了。

    • Ubuntu、Debian和Deepin

      首先安装Python 3,这里使用apt-get安装即可。在安装前,还需安装一些基础库,相关命令如下:

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

      执行完上述命令后,就可以成功安装Python 3了。

      然后还需要安装pip 3,这里仍然使用apt-get安装即可,相关命令如下:

      sudo apt-get install -y python3-pip

      执行完毕后,便可以成功安装Python 3及pip 3了。

  2. 源码安装

    如果命令行的安装方式有问题,还可以下载Python 3源码进行安装。

    源码下载地址为https://www.python.org/ftp/python/,可以自行选用想要的版本进行安装。这里以Python 3.6.2为例进行说明,安装路径设置为/usr/local/python3。

    首先,创建安装目录,相关命令如下:

    sudo mkdir /usr/local/python3

    随后下载安装包并解压进入,相关命令如下:

    wget --no-check-certificate https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
    tar -xzvf Python-3.6.2.tgz
    cd Python-3.6.2

    接下来,编译安装。所需的时间可能较长,请耐心等待,命令如下:

    sudo ./configure --prefix=/usr/local/python3
    sudo make
    sudo make install

    安装完成之后,创建Python 3链接,相关命令如下:

    sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3

    随后下载pip安装包并安装,命令如下:

    wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.1.tar.gz
    tar -xzvf 9.0.1.tar.gz
    cd pip-9.0.1
    python3 setup.py install

    安装完成后再创建pip 3链接,相关命令如下:

    sudo ln -s /usr/local/python3/bin/pip /usr/bin/pip3

    这样就成功安装好了Python 3及pip 3。

  3. Anaconda安装

    Anaconda同样支持Linux,其官方下载链接为https://www.continuum.io/downloads,选择Python 3版本的安装包下载即可,如图1-10所示。

    图1-10 Anaconda Linux下载页面

    如果下载速度过慢,同样可以使用清华镜像,具体可参考Windows部分的介绍,在此不再赘述。

  4. 测试验证

    在命令行界面下测试Python 3和pip 3是否安装成功:

    $ python3
    Python 3.5.2 (default, Nov 17 2016, 17:05:23)
    Type "help", "copyright", "credits" or "license" for more information.
    >>> exit()
    $ pip3 -V
    pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

    若出现类似上面的提示,则证明Python 3和pip 3安装成功。

1.1.3 Mac下的安装

在Mac下同样有多种安装方式,如Homebrew、安装包安装、Anaconda安装等,这里推荐使用Homebrew安装。

  1. Homebrew安装

    Homebrew是Mac平台下强大的包管理工具,其官方网站是https://brew.sh/

    执行如下命令,即可安装Homebrew:

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    安装完成后,便可以使用brew命令安装Python 3和pip 3了:

    brew install python3

    命令执行完成后,我们发现Python 3和pip 3均已成功安装。

  2. 安装包安装

    可以到官方网站下载Python 3安装包。链接为https://www.python.org/downloads/,页面如图1-2所示。

    在Mac平台下,可以选择下载Mac OS X 64-bit/32-bit installer,下载完成后,打开安装包按照提示安装即可。

  3. Anaconda安装

    Anaconda同样支持Mac,其官方下载链接为:https://www.continuum.io/downloads,选择Python 3版本的安装包下载即可,如图1-11所示。

    图1-11 Anaconda Mac下载页面

    如果下载速度过慢,同样可以使用清华镜像,具体可参考Windows部分的介绍,在此不再赘述。

  4. 测试验证

    打开终端,在命令行界面中测试Python 3和pip 3是否成功安装,如图1-12所示。

    图1-12 测试验证页面

    若出现上面的提示,则证明Python 3和pip 3安装成功。

    本节中,我们介绍了3大平台Windows、Linux和Mac下Python 3的安装方式。安装完成后,我们便可以开启Python爬虫的征程了。

1.2 请求库的安装

爬虫可以简单分为几步:抓取页面、分析页面和存储数据。

在抓取页面的过程中,我们需要模拟浏览器向服务器发出请求,所以需要用到一些Python库来实现HTTP请求操作。在本书中,我们用到的第三方库有requests、Selenium和aiohttp等。

在本节中,我们介绍一下这些请求库的安装方法。

1.2.1 requests的安装

由于requests属于第三方库,也就是Python默认不会自带这个库,所以需要我们手动安装。下面我们首先看一下它的安装过程。

  1. 相关链接

  2. pip安装

    无论是Windows、Linux还是Mac,都可以通过pip这个包管理工具来安装。

    在命令行界面中运行如下命令,即可完成requests库的安装:

    pip3 install requests

    这是最简单的安装方式,推荐使用这种方法安装。

  3. wheel安装

    wheel是Python的一种安装包,其后缀为.whl,在网速较差的情况下可以选择下载wheel文件再安装,然后直接用pip3命令加文件名安装即可。

    不过在这之前需要先安装wheel库,安装命令如下:

    pip3 install wheel

    然后到PyPI上下载对应的wheel文件,如最新版本为2.17.3,则打开https://pypi.python.org/pypi/requests/2.17.3#downloads,下载requests-2.17.3-py2.py3-none-any.whl到本地。

    随后在命令行界面进入wheel文件目录,利用pip安装即可:

    pip3 install requests-2.17.3-py2.py3-none-any.whl

    这样我们也可以完成requests的安装。

  4. 源码安装

    如果你不想用pip来安装,或者想获取某一特定版本,可以选择下载源码安装。

    此种方式需要先找到此库的源码地址,然后下载下来再用命令安装。

    requests项目的地址是:https://github.com/kennethreitz/requests

    可以通过Git来下载源代码:

    git clone git://github.com/kennethreitz/requests.git

    或通过curl下载:

    curl -OL https://github.com/kennethreitz/requests/tarball/master

    下载下来之后,进入目录,执行如下命令即可安装:

    cd requests
    python3 setup.py install

    命令执行结束后即可完成requests的安装。由于这种安装方式比较烦琐,后面不再赘述。

  5. 验证安装

    为了验证库是否已经安装成功,可以在命令行模式测试一下:

    $ python3
    >>> import requests

    首先输入python3,进入命令行模式,然后输入上述内容,如果什么错误提示也没有,就证明已经成功安装了requests。

1.2.2 Selenium的安装

Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等操作。对于一些JavaScript渲染的页面来说,这种抓取方式非常有效。下面我们来看看Selenium的安装过程。

  1. 相关链接

  2. pip安装

    这里推荐直接使用pip安装,执行如下命令即可:

    pip3 install selenium
  3. wheel安装

    此外,也可以到PyPI下载对应的wheel文件进行安装(下载地址:https://pypi.python.org/pypi/selenium/#downloads),如最新版本为3.4.3,则下载selenium-3.4.3-py2.py3-none-any.whl即可。

    然后进入wheel文件目录,使用pip安装:

    pip3 install selenium-3.4.3-py2.py3-none-any.whl
  4. 验证安装

    进入Python命令行交互模式,导入Selenium包,如果没有报错,则证明安装成功:

    $ python3
    >>> import selenium

    但这样做还不够,因为我们还需要用浏览器(如Chrome、Firefox等)来配合Selenium工作。

    后面我们会介绍Chrome、Firefox、PhantomJS三种浏览器的配置方式。有了浏览器,我们才可以配合Selenium进行页面的抓取。

1.2.3 ChromeDriver的安装

前面我们成功安装好了Selenium库,但是它是一个自动化测试工具,需要浏览器来配合使用,本节中我们就介绍一下Chrome浏览器及ChromeDriver驱动的配置。

首先,下载Chrome浏览器,方法有很多,在此不再赘述。

随后安装ChromeDriver。因为只有安装ChromeDriver,才能驱动Chrome浏览器完成相应的操作。下面我们来介绍下怎样安装ChromeDriver。

  1. 相关链接

  2. 准备工作

    在这之前请确保已经正确安装好了Chrome浏览器并可以正常运行,安装过程不再赘述。

  3. 查看版本

    点击Chrome菜单“帮助”→“关于Google Chrome”,即可查看Chrome的版本号,如图1-13所示。

    {%}

    图1-13 Chrome版本号

    这里我的Chrome版本是58.0。

    请记住Chrome版本号,因为选择ChromeDriver版本时需要用到。

  4. 下载ChromeDriver

    打开ChromeDriver的官方网站,可以看到最新版本为2.31,其支持的Chrome浏览器版本为58~60,官网页面如图1-14所示。

    图1-14 官网页面

    如果你的Chrome版本号是58~60,那么可以选择此版本下载。

    如果你的Chrome版本号不在此范围,可以继续查看之前的ChromeDriver版本。每个版本都有相应的支持Chrome版本的介绍,请找好自己的Chrome浏览器版本对应的ChromeDriver版本再下载,否则可能无法正常工作。

    找好对应的版本号后,随后到ChromeDriver镜像站下载对应的安装包即可:https://chromedriver.storage.googleapis.com/index.html。在不同平台下,可以下载不同的安装包。

  5. 环境变量配置

    下载完成后,将ChromeDriver的可执行文件配置到环境变量下。

    在Windows下,建议直接将chromedriver.exe文件拖到Python的Scripts目录下,如图1-15所示。

    {%}

    图1-15 Python Scripts目录

    此外,也可以单独将其所在路径配置到环境变量,具体的配置方法请参见1.1节。

    在Linux和Mac下,需要将可执行文件配置到环境变量或将文件移动到属于环境变量的目录里。

    例如,要移动文件到/usr/bin目录。首先,需要在命令行模式下进入其所在路径,然后将其移动到/usr/bin:

    sudo mv chromedriver /usr/bin

    另外,如果你的系统是 Mac OS X El Capitan 10.11 及更新版本的话,需要先关闭Rootless 内核保护机制,具体可参考:http://www.pc6.com/edu/86809.html

    当然,也可以将ChromeDriver配置到$PATH。首先,可以将可执行文件放到某一目录,目录可以任意选择,例如将当前可执行文件放在/usr/local/chromedriver目录下,接下来在 Linux 下可以修改 ~/.profile 文件,在 Mac 下可以修改 ~/.bash_profile 文件,添加如下内容:

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

    保存后在 Linux 下执行如下命令:

    source ~/.profile

    在 Mac 下执行如下命令:

    source ~/.bash_profile

    即可完成环境变量的添加。

  6. 验证安装

    配置完成后,就可以在命令行下直接执行chromedriver命令了:

    chromedriver

    如果输入控制台有类似图1-16所示的输出,则证明ChromeDriver的环境变量配置好了。

    {%}

    图1-16 控制台输出

    随后再在程序中测试。执行如下Python代码:

    from selenium import webdriver
    browser = webdriver.Chrome()

    运行之后,如果弹出一个空白的Chrome浏览器,则证明所有的配置都没有问题。如果没有弹出,请检查之前的每一步配置。

    如果弹出后闪退,则可能是ChromeDriver版本和Chrome版本不兼容,请更换ChromeDriver版本。

    如果没有问题,接下来就可以利用Chrome来做网页抓取了。

1.2.4 GeckoDriver的安装

上一节中,我们了解了ChromeDriver的配置方法,配置完成之后便可以用Selenium驱动Chrome浏览器来做相应网页的抓取。

那么对于Firefox来说,也可以使用同样的方式完成Selenium的对接,这时需要安装另一个驱动GeckoDriver。

本节中,我们来介绍一下GeckoDriver的安装过程。

  1. 相关链接

  2. 准备工作

    在这之前请确保已经正确安装好了Firefox浏览器并可以正常运行,安装过程不再赘述。

  3. 下载GeckoDriver

    我们可以在GitHub上找到GeckoDriver的发行版本,当前最新版本为0.18,下载页面如图1-17所示。

    {%}

    图1-17 GeckoDriver下载页面

    这里可以在不同的平台上下载,如Windows、Mac、Linux、ARM等平台,我们可以根据自己的系统和位数选择对应的驱动下载,若是Windows 64位,就下载geckodriver-v0.18.0-win64.zip。

  4. 环境变量配置

    在Windows下,可以直接将geckodriver.exe文件拖到Python的Scripts目录下,如图1-18所示。

    {%}

    图1-18 将geckodriver.exe文件拖到Python Scripts目录

    此外,也可以单独将其所在路径配置到环境变量,具体的配置方法请参1.1节。

    在Linux和Mac下,需要将可执行文件配置到环境变量或将文件移动到属于环境变量的目录里。

    例如,要移动文件到/usr/bin目录。首先在命令行模式下进入其所在路径,然后将其移动到/usr/bin:

    sudo mv geckodriver /usr/bin

    当然,也可以将GeckoDriver配置到$PATH。首先,可以将可执行文件放到某一目录,目录可以任意选择,例如将当前可执行文件放在/usr/local/geckodriver目录下。接下来可以修改~/.profile文件,命令如下:

    vi ~/.profile

    然后添加如下一句配置:

    export PATH="$PATH:/usr/local/geckodriver"

    保存后执行如下命令即可完成配置:

    source ~/.profile
  5. 验证安装

    配置完成后,就可以在命令行下直接执行geckodriver命令测试:

    geckodriver

    这时如果控制台有类似图1-19所示的输出,则证明GeckoDriver的环境变量配置好了。

    图1-19 控制台输出

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

    from selenium import webdriver
    browser = webdriver.Firefox()

    运行之后,若弹出一个空白的Firefox浏览器,则证明所有的配置都没有问题;如果没有弹出,请检查之前的每一步配置。

    如果没有问题,接下来就可以利用Firefox配合Selenium来做网页抓取了。

  6. 结语

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

1.2.5 PhantomJS的安装

PhantomJS是一个无界面的、可脚本编程的WebKit浏览器引擎,它原生支持多种Web标准:DOM操作、CSS选择器、JSON、Canvas以及SVG。

Selenium支持PhantomJS,这样在运行的时候就不会再弹出一个浏览器了。而且PhantomJS的运行效率也很高,还支持各种参数配置,使用非常方便。下面我们就来了解一下PhantomJS的安装过程。

  1. 相关链接

  2. 下载PhantomJS

    我们需要在官方网站下载对应的安装包,PhantomJS支持多种操作系统,比如Windows、Linux、Mac、FreeBSD等,我们可以选择对应的平台并将安装包下载下来。

    下载完成后,将PhantomJS可执行文件所在的路径配置到环境变量里。比如在Windows下,将下载的文件解压之后并打开,会看到一个bin文件夹,里面包括一个可执行文件phantomjs.exe,我们需要将它直接放在配置好环境变量的路径下或者将它所在的路径配置到环境变量里。比如,我们既可以将它直接复制到Python的Scripts文件夹,也可以将它所在的bin目录加入到环境变量。

    Windows下环境变量的配置可以参见1.1节,Linux及Mac环境变量的配置可以参见1.2.3节,在此不再赘述,关键在于将PhantomJS的可执行文件所在路径配置到环境变量里。

    配置成功后,可以在命令行下测试一下,输入:

    phantomjs

    如果可以进入到PhantomJS的命令行,那就证明配置完成了,如图1-20所示。

    图1-20 控制台

  3. 验证安装

    在Selenium中使用的话,我们只需要将Chrome切换为PhantomJS即可:

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

    运行之后,我们就不会发现有浏览器弹出了,但实际上PhantomJS已经运行起来了。这里我们访问了百度,然后将当前的URL打印出来。

    控制台的输出如下:

    https://www.baidu.com/

    如此一来,我们便完成了PhantomJS的配置,后面可以利用它来完成一些页面的抓取。

    这里我们介绍了Selenium对应的三大主流浏览器的对接方式,后面我们会对Selenium及各个浏览器的对接方法进行更加深入的探究。

1.2.6 aiohttp的安装

之前介绍的requests库是一个阻塞式HTTP请求库,当我们发出一个请求后,程序会一直等待服务器响应,直到得到响应后,程序才会进行下一步处理。其实,这个过程比较耗费时间。如果程序可以在这个等待过程中做一些其他的事情,如进行请求的调度、响应的处理等,那么爬取效率一定会大大提高。

aiohttp就是这样一个提供异步Web服务的库,从Python 3.5版本开始,Python中加入了async/await关键字,使得回调的写法更加直观和人性化。aiohttp的异步操作借助于async/await关键字的写法变得更加简洁,架构更加清晰。使用异步请求库进行数据抓取时,会大大提高效率,下面我们来看一下这个库的安装方法。

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,命令如下:

    pip3 install aiohttp

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

    pip3 install cchardet aiodns
  3. 测试安装

    安装完成之后,可以在Python命令行下测试:

    $ python3
    >>> import aiohttp

    如果没有错误报出,则证明库已经安装好了。

  4. 结语

    我们会在后面的实例中用到这个库,比如维护一个代理池时,利用异步方式检测大量代理的运行状况,会极大地提升效率。

1.3 解析库的安装

抓取网页代码之后,下一步就是从网页中提取信息。提取信息的方式有多种多样,可以使用正则来提取,但是写起来相对比较烦琐。这里还有许多强大的解析库,如lxml、Beautiful Soup、pyquery等。此外,还提供了非常强大的解析方法,如XPath解析和CSS选择器解析等,利用它们,我们可以高效便捷地从网页中提取有效信息。

本节中,我们就来介绍一下这些库的安装过程。

1.3.1 lxml的安装

lxml是Python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。本节中,我们了解一下lxml的安装方式,这主要从Windows、Linux和Mac三大平台来介绍。

  1. 相关链接

  2. Windows下的安装

    在Windows下,可以先尝试利用pip安装,此时直接执行如下命令即可:

    pip3 install lxml

    如果没有任何报错,则证明安装成功。

    如果出现报错,比如提示缺少libxml2库等信息,可以采用wheel方式安装。

    推荐直接到这里(链接为:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml)下载对应的wheel文件,找到本地安装Python版本和系统对应的lxml版本,例如Windows 64位、Python 3.6,就选择lxml-3.8.0-cp36-cp36m-win_amd64.whl,将其下载到本地。

    然后利用pip安装即可,命令如下:

    pip3 install lxml-3.8.0-cp36-cp36m-win_amd64.whl

    这样我们就可以成功安装lxml了。

  3. Linux下的安装

    在Linux平台下安装问题不大,同样可以先尝试pip安装,命令如下:

    pip3 install lxml

    如果报错,可以尝试下面的解决方案。

    • CentOS、Red Hat

      对于此类系统,报错主要是因为缺少必要的库。

      执行如下命令安装所需的库即可:

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

      主要是libxslt-devel和libxml2-devel这两个库,lxml依赖它们。安装好之后,重新尝试pip安装即可。

    • Ubuntu、Debian和Deepin

      在这些系统下,报错的原因同样可能是缺少了必要的类库,执行如下命令安装:

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

      安装好之后,重新尝试pip安装即可。

  4. Mac下的安装

    在Mac平台下,仍然可以首先尝试pip安装,命令如下:

    pip3 install lxml

    如果产生错误,可以执行如下命令将必要的类库安装:

    xcode-select --install

    之后再重新尝试pip安装,就没有问题了。

    lxml是一个非常重要的库,后面的Beautiful Soup、Scrapy框架都需要用到此库,所以请一定安装成功。

  5. 验证安装

    安装完成之后,可以在Python命令行下测试:

    $ python3
    >>> import lxml

    如果没有错误报出,则证明库已经安装好了。

1.3.2 Beautiful Soup的安装

Beautiful Soup是Python的一个HTML或XML的解析库,我们可以用它来方便地从网页中提取数据。它拥有强大的API和多样的解析方式,本节就来了解下它的安装方式。

  1. 相关链接

  2. 准备工作

    Beautiful Soup的HTML和XML解析器是依赖于lxml库的,所以在此之前请确保已经成功安装好了lxml库,具体的安装方式参见上节。

  3. pip安装

    目前,Beautiful Soup的最新版本是4.x版本,之前的版本已经停止开发了。这里推荐使用pip来安装,安装命令如下:

    pip3 install beautifulsoup4

    命令执行完毕之后即可完成安装。

  4. wheel安装

    当然,我们也可以从PyPI下载wheel文件安装,链接如下:https://pypi.python.org/pypi/beautifulsoup4

    然后使用pip安装wheel文件即可。

  5. 验证安装

    安装完成之后,可以运行下面的代码验证一下:

    from bs4 import BeautifulSoup
    soup = BeautifulSoup('<p>Hello</p>', 'lxml')
    print(soup.p.string)

    运行结果如下:

    Hello

    如果运行结果一致,则证明安装成功。

    注意,这里我们虽然安装的是beautifulsoup4这个包,但是在引入的时候却是bs4。这是因为这个包源代码本身的库文件夹名称就是bs4,所以安装完成之后,这个库文件夹就被移入到本机Python3的lib库里,所以识别到的库文件名就叫作bs4。

    因此,包本身的名称和我们使用时导入的包的名称并不一定是一致的。

1.3.3 pyquery的安装

pyquery同样是一个强大的网页解析工具,它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便。本节中,我们就来了解一下它的安装方式。

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,命令如下:

    pip3 install pyquery

    命令执行完毕之后即可完成安装。

  3. wheel安装

    当然,我们也可以到PyPI(https://pypi.python.org/pypi/pyquery/#downloads)下载对应的wheel文件安装。比如如果当前版本为1.2.17,则下载的文件名称为pyquery-1.2.17-py2.py3-none-any.whl,此时下载到本地再进行pip安装即可,命令如下:

    pip3 install pyquery-1.2.17-py2.py3-none-any.whl
  4. 验证安装

    安装完成之后,可以在Python命令行下测试:

    $ python3
    >>> import pyquery

    如果没有错误报出,则证明库已经安装好了。

1.3.4 tesserocr的安装

在爬虫过程中,难免会遇到各种各样的验证码,而大多数验证码还是图形验证码,这时候我们可以直接用OCR来识别。

  1. OCR

    OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。对于图形验证码来说,它们都是一些不规则的字符,这些字符确实是由字符稍加扭曲变换得到的内容。

    例如,对于如图1-21和图1-22所示的验证码,我们可以使用OCR技术来将其转化为电子文本,然后爬虫将识别结果提交给服务器,便可以达到自动识别验证码的过程。

    图1-21 验证码

    图1-22 验证码

    tesserocr是Python的一个OCR识别库,但其实是对tesseract做的一层Python API封装,所以它的核心是tesseract。因此,在安装tesserocr之前,我们需要先安装tesseract。

  2. 相关链接

  3. Windows下的安装

    在Windows下,首先需要下载tesseract,它为tesserocr提供了支持。

    进入下载页面,可以看到有各种.exe文件的下载列表,这里可以选择下载3.0版本。图1-23所示为3.05版本。

    {%}

    图1-23 下载页面

    其中文件名中带有dev的为开发版本,不带dev的为稳定版本,可以选择下载不带dev的版本,例如可以选择下载tesseract-ocr-setup-3.05.01.exe。

    下载完成后双击,此时会出现如图1-24所示的页面。

    {%}

    图1-24 安装页面

    此时可以勾选Additional language data(download)选项来安装OCR识别支持的语言包,这样OCR便可以识别多国语言。然后一路点击Next按钮即可。

    接下来,再安装tesserocr即可,此时直接使用pip安装:

    pip3 install tesserocr pillow
  4. Linux下的安装

    对于Linux来说,不同系统已经有了不同的发行包了,它可能叫作tesseract-ocr或者tesseract,直接用对应的命令安装即可。

    • Ubuntu、Debian和Deepin

      在Ubuntu、Debian和Deepin系统下,安装命令如下:

      sudo apt-get install -y tesseract-ocr libtesseract-dev libleptonica-dev
    • CentOS、Red Hat

      在CentOS和Red Hat系统下,安装命令如下:

      yum install -y tesseract

    在不同发行版本运行如上命令,即可完成tesseract的安装。

    安装完成后,便可以调用tesseract命令了。

    接着,我们查看一下其支持的语言:

    tesseract --list-langs

    运行结果示例:

    List of available languages (3):
    eng
    osd
    equ

    结果显示它只支持几种语言,如果想要安装多国语言,还需要安装语言包,官方叫作tessdata(其下载链接为:https://github.com/tesseract-ocr/tessdata)。

    利用Git命令将其下载下来并迁移到相关目录即可,不同版本的迁移命令如下所示。

    在Ubuntu、Debian和Deepin系统下的迁移命令如下:

    git clone https://github.com/tesseract-ocr/tessdata.git
    sudo mv tessdata/* /usr/share/tesseract-ocr/tessdata

    在CentOS和Red Hat系统下的迁移命令如下:

    git clone https://github.com/tesseract-ocr/tessdata.git
    sudo mv tessdata/* /usr/share/tesseract/tessdata

    这样就可以将下载下来的语言包全部安装了。

    这时我们重新运行列出所有语言的命令:

    tesseract --list-langs

    结果如下:

    List of available languages (107):
    afr
    amh
    ara
    asm
    aze
    aze_cyrl
    bel
    ben
    bod
    bos
    bul
    cat
    ceb
    ces
    chi_sim
    chi_tra
    ...

    可以发现,这里列出的语言就多了很多,比如chi_sim就代表简体中文,这就证明语言包安装成功了。

    接下来再安装tesserocr即可,这里直接使用pip安装:

    pip3 install tesserocr pillow
  5. Mac下的安装

    在Mac下,我们首先使用Homebrew安装ImageMagick和tesseract库:

    brew install imagemagick
    brew install tesseract --all-languages

    接下来再安装tesserocr即可:

    pip3 install tesserocr pillow

    这样我们便完成了tesserocr的安装。

  6. 验证安装

    接下来,我们可以使用tesseract和tesserocr来分别进行测试。

    下面我们以如图1-25所示的图片为样例进行测试。

    图1-25 测试样例

    该图片的链接为https://raw.githubusercontent.com/Python3WebSpider/TestTess/master/image.png,可以直接保存或下载。

    首先用命令行进行测试,将图片下载下来并保存为image.png,然后用tesseract命令测试:

    tesseract image.png result -l eng && cat result.txt

    运行结果如下:

    Tesseract Open Source OCR Engine v3.05.01 with Leptonica
    Python3WebSpider

    这里我们调用了tesseract命令,其中第一个参数为图片名称,第二个参数result为结果保存的目标文件名称,-l指定使用的语言包,在此使用英文(eng)。然后,再用cat命令将结果输出。

    运行结果便是图片的识别结果:Python3WebSpider。可以看到,这时已经成功将图片文字转为电子文本了。

    然后还可以利用Python代码来测试,这里就需要借助于tesserocr库了,测试代码如下:

    import tesserocr
    from PIL import Image
    image = Image.open('image.png')
    print(tesserocr.image_to_text(image))

    我们首先利用Image读取了图片文件,然后调用了tesserocrimage_to_text()方法,再将其识别结果输出。

    运行结果如下:

    Python3WebSpider

    另外,我们还可以直接调用file_to_text()方法,这可以达到同样的效果:

    import tesserocr
    print(tesserocr.file_to_text('image.png'))

    运行结果:

    Python3WebSpider

    如果成功输出结果,则证明tesseract和tesserocr都已经安装成功。

1.4 数据库的安装

作为数据存储的重要部分,数据库同样是必不可少的,数据库可以分为关系型数据库和非关系型数据库。

关系型数据库如SQLite、MySQL、Oracle、SQL Server、DB2等,其数据库是以表的形式存储;非关系型数据库如MongoDB、Redis,它们的存储形式是键值对,存储形式更加灵活。

本书用到的数据库主要有关系型数据库MySQL及非关系型数据库MongoDB、Redis。

本节中,我们来了解一下它们的安装方式。

1.4.1 MySQL的安装

MySQL是一个轻量级的关系型数据库,本节中我们来了解下它的安装方式。

  1. 相关链接

  2. Windows下的安装

    对于Windows来说,可以直接在百度软件中心搜索MySQL,下载其提供的MySQL安装包,速度还是比较快的。

    当然,最安全稳妥的方式是直接到官网下载安装包进行安装,但可能下载速度没那么快。

    下载完成后,双击安装包即可安装,这里直接选择默认选项,点击Next按钮安装即可。这里需要记住图1-26所设置的密码。

    {%}

    图1-26 设置密码页面

    安装完成后,我们可以在“计算机”→“管理”→“服务”页面开启和关闭MySQL服务,如图1-27所示。

    {%}

    图1-27 系统服务页面

    如果启动了MySQL服务,就可以使用它来存储数据了。

  3. Linux下的安装

    下面我们仍然分平台来介绍。

    • Ubuntu、Debian和Deepin

      在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和Red Hat

      这里以MySQL 5.6的Yum源为例来说明(如果需要更高版本,可以另寻),安装命令如下:

      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服务。

      启动MySQL服务的命令如下:

      sudo systemctl start mysqld

      停止、重启MySQL服务的命令如下:

      sudo systemctl stop mysqld
      sudo systemctl restart mysqld

    上面我们完成了Linux下MySQL的安装,之后可以修改密码,此时可以执行如下命令:

    mysql -uroot -p

    输入密码后,进入MySQL命令行模式,接着输入如下命令:

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

    其中newpass为修改的新的MySQL密码,请自行替换。

    由于Linux一般会作为服务器使用,为了使MySQL可以被远程访问,我们需要修改MySQL的配置文件,配置文件的路径一般为/etc/mysql/my.cnf。

    比如,使用vi进行修改的命令如下:

    vi /etc/mysql/my.cnf

    注释此行:

    bind-address = 127.0.0.1

    此行限制了MySQL只能本地访问而不能远程访问,注释掉即可解除此限制。

    修改完成后重启MySQL服务,此时MySQL就可以被远程访问了。

    到此为止,在Linux下安装MySQL的过程就结束了。

  4. Mac下的安装

    这里推荐使用Homebrew安装,直接执行brew命令即可:

    brew install mysql

    启动、停止和重启MySQL服务的命令如下:

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

    Mac一般不会作为服务器使用,如果想取消本地host绑定,那么需要修改my.cnf 文件,然后重启服务。

1.4.2 MongoDB的安装

MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。

MongoDB支持多种平台,包括Windows、Linux、Mac OS、Solaris等,在其官方网站(https://www.mongodb.com/download-center)均可找到对应的安装包。

本节中,我们来看下它的安装过程。

  1. 相关链接

  2. Windows下的安装

    这里直接在官网(如图1-28所示)点击DOWNLOAD按钮下载msi安装包即可。

    {%}

    图1-28 MongoDB官网

    下载完成后,双击它开始安装,指定MongoDB的安装路径,例如此处我指定的安装路径为C:\MongoDB\Server\3.4,如图1-29所示。当然,这里也可以自行选择路径。

    {%}

    图1-29 指定安装路径

    点击Next按钮执行安装即可。

    安装成功之后,进入MongoDB的安装目录,此处是C:\MongoDB\Server\3.4,在bin目录下新建同级目录data,如图1-30所示。

    {%}

    图1-30 新建data目录

    然后进入data文件夹,新建子文件夹db来存储数据目录,如图1-31所示。

    {%}

    图1-31 新建db目录

    之后打开命令行,进入MongoDB安装目录的bin目录下,运行MongoDB服务:

    mongod --dbpath "C:\MongoDB\Server\3.4\data\db"

    请记得将此处的路径替换成你的主机MongoDB安装路径。

    运行之后,会出现一些输出信息,如图1-32所示。

    {%}

    图1-32 运行结果

    这样我们就启动MongoDB服务了。

    但是如果我们想一直使用MongoDB,就不能关闭此命令行了。如果意外关闭或重启,MongoDB服务就不能使用了。这显然不是我们想要的。所以,接下来还需将MongoDB配置成系统服务。

    首先,以管理员模式运行命令行。注意,此处一定要以管理员身份运行,否则可能配置失败,如图1-33所示。

    {%}

    图1-33 以管理员身份运行

    在“开始”菜单中搜索cmd,找到命令行,然后右击它以管理员身份运行即可。

    随后新建一个日志文件,在bin目录新建logs同级目录,进入之后新建一个mongodb.log文件,用于保存MongoDB的运行日志,如图1-34所示。

    图1-34 新建mongodb.log文件

    在命令行下输入如下内容:

    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安装路径,运行此命令后即可安装服务,运行结果如图1-35所示。

    图1-35 运行结果

    如果没有出现错误提示,则证明MongoDB服务已经安装成功。

    可以在服务管理页面查看到系统服务,如图1-36所示。

    {%}

    图1-36 系统服务页面

    然后就可以设置它的开机启动方式了,如自动启动或手动启动等,这样我们就可以非常方便地管理MongoDB服务了。

    启动服务后,在命令行下就可以利用mongo命令进入MongoDB命令交互环境了,如图1-37所示。

    图1-37 命令行模式

    这样,Windows下的MongoDB配置就完成了。

  3. Linux下的安装

    这里以MongoDB 3.4为例说明MongoDB的安装过程。

    • Ubuntu

      首先,导入MongoDB的GPG key:

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

      随后创建apt-get源列表,各个系统版本对应的命令分别如下。

      • Ubuntu 12.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
      • Ubuntu 14.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
      • Ubuntu 16.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路径下。

      一般情况下,我们在Linux上配置MongoDB都是为了远程连接使用的,所以这里还需要配置一下MongoDB的远程连接以及用户名和密码。

      接着,进入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的用户,赋予最高权限。

      随后需要修改MongoDB的配置文件,此时执行如下命令:

      sudo vi /etc/mongod.conf

      然后修改net部分为:

      net:
        port: 27017
        bindIp: 0.0.0.0

      这样配置后,MongoDB可被远程访问。

      另外,还需要添加如下的权限认证配置。此时直接添加如下内容到配置文件即可:

      security:
        authorization: enabled

      配置完成之后,我们需要重新启动MongoDB服务,命令如下:

      sudo service mongod restart

      这样远程连接和权限认证就配置完成了。

    • CentOS和Red Hat

      首先,添加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 systemctl start mongod

      停止和重新加载MongoDB服务的命令如下:

      sudo systemctl stop mongod
      sudo systemctl reload mongod

      有关远程连接和认证配置,可以参考前面,方式是相同的。

      更多Linux发行版的MongoDB安装方式可以参考官方文档:https://docs.mongodb.com/manual/administration/install-on-linux/

  4. Mac下的安装

    这里推荐使用Homebrew安装,直接执行brew命令即可:

    brew install mongodb

    然后创建一个新文件夹/data/db,用于存放MongoDB数据。

    这里启动MongoDB服务的命令如下:

    brew services start mongodb
    sudo mongod

    停止和重启MongoDB服务的命令分别是:

    brew services stop mongodb
    brew services restart mongodb
  5. 可视化工具

    这里推荐一个可视化工具RoboMongo/Robo 3T,它使用简单,功能强大,官方网站为https://robomongo.org/,三大平台都支持,下载链接为https://robomongo.org/download

    另外,还有一个简单易用的可视化工具——Studio 3T,它同样具有方便的图形化管理界面,官方网站为https://studio3t.com,同样支持三大平台,下载链接为https://studio3t.com/download/

1.4.3 Redis的安装

Redis是一个基于内存的高效的非关系型数据库,本节中我们来了解一下它在各个平台的安装过程。

  1. 相关链接

  2. Windows下的安装

    在Windows下,Redis可以直接到GitHub的发行版本里面下载,具体下载地址是https://github.com/MSOpenTech/redis/releases

    打开下载页面后,会发现有许多发行版本及其安装包,如图1-38所示。

    图1-38 下载页面

    可以下载Redis-x64-3.2.100.msi安装即可。

    安装过程比较简单,直接点击Next按钮安装即可。安装完成后,Redis便会启动。

    在系统服务页面里,可以观察到多了一个正在运行到Redis服务,如图1-39所示。

    {%}

    图1-39 系统服务页面

    另外,推荐下载Redis Desktop Manager可视化管理工具,来管理Redis。这既可以到官方网站(链接为:https://redisdesktop.com/download)下载,也可以到GitHub(链接为:https://github.com/uglide/RedisDesktopManager/releases)下载最新发行版本。

    安装后,直接连接本地Redis即可。

  3. Linux下的安装

    这里依然分为两类平台来介绍。

    • Ubuntu、Debian和Deepin

      在Ubuntu、Debian和Deepin系统下,使用apt-get命令安装Redis:

      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成功安装了,但是现在Redis还是无法远程连接的,依然需要修改配置文件,配置文件的路径为/etc/redis/redis.conf。

      首先,注释这一行:

      bind 127.0.0.1

      另外,推荐给Redis设置密码,取消注释这一行:

      requirepass foobared

      foobared即当前密码,可以自行修改。

      然后重启Redis服务,使用的命令如下:

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

      现在就可以使用密码远程连接Redis了。

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

      sudo /etc/init.d/redis-server stop
      sudo /etc/init.d/redis-server start
    • CentOS和Red Hat

      在CentOS和Red Hat系统中,首先添加EPEL仓库,然后更新yum源:

      sudo yum install epel-release
      sudo yum update

      然后安装Redis数据库:

      sudo yum -y install redis

      安装好后启动Redis服务即可:

      sudo systemctl start redis

      这里同样可以使用redis-cli进入Redis命令行模式操作。

      另外,为了可以使Redis能被远程连接,需要修改配置文件,路径为/etc/redis.conf。

      参见上文来修改配置文件实现远程连接和密码配置。

      修改完成之后保存。

      然后重启Redis服务即可,命令如下:

      sudo systemctl restart redis
  4. 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服务。停止和重启Redis服务的命令分别如下:

    brew services stop redis
    brew services restart redis

    另外,在Mac下也可以安装Redis Desktop Manager可视化管理工具来管理Redis。

1.5 存储库的安装

1.4节中,我们介绍了几个数据库的安装方式,但这仅仅是用来存储数据的数据库,它们提供了存储服务,但如果想要和Python交互的话,还需要安装一些Python存储库,如MySQL需要安装PyMySQL,MongoDB需要安装PyMongo等。本节中,我们来说明一下这些存储库的安装方式。

1.5.1 PyMySQL的安装

在Python 3中,如果想要将数据存储到MySQL中,就需要借助PyMySQL来操作,本节中我们介绍一下它的安装方式。

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,命令如下:

    pip3 install pymysql

    执行完命令后即可完成安装。

  3. 验证安装

    为了验证库是否已经安装成功,可以在命令行下测试一下。这里首先输入python3,进入命令行模式,接着输入如下内容:

    $ python3
    >>> import pymysql
    >>> pymysql.VERSION
    (0, 7, 11, None)
    >>>

    如果成功输出了其版本内容,那么证明PyMySQL成功安装。

1.5.2 PyMongo的安装

在Python中,如果想要和MongoDB进行交互,就需要借助于PyMongo库,这里就来了解一下它的安装方法。

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,命令如下:

    pip3 install pymongo

    运行完毕之后,即可完成PyMongo的安装。

  3. 验证安装

    为了验证PyMongo库是否已经安装成功,可以在命令行下测试一下:

    $ python3
    >>> import pymongo
    >>> pymongo.version
    '3.4.0'
    >>>

    如果成功输出了其版本内容,那么证明成功安装。

1.5.3 redis-py的安装

对于Redis来说,我们要使用redis-py库来与其交互,这里就来介绍一下它的安装方法。

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,命令如下:

    pip3 install redis

    运行完毕之后,即可完成redis-py的安装。

  3. 验证安装

    为了验证redis-py库是否已经安装成功,可以在命令行下测试一下:

    $ python3
    >>> import redis
    >>> redis.VERSION
    (2, 10, 5)
    >>>

    如果成功输出了其版本内容,那么证明成功安装了redis-py。

1.5.4 RedisDump的安装

RedisDump是一个用于Redis数据导入/导出的工具,是基于Ruby实现的,所以要安装RedisDump,需要先安装Ruby。

  1. 相关链接

  2. 安装Ruby

    有关Ruby的安装方式可以参考http://www.ruby-lang.org/zh_cn/documentation/installation,这里列出了所有平台的安装方式,可以根据对应的平台选用合适的安装方式。

  3. gem安装

    安装完成之后,就可以执行gem命令了,它类似于Python中的pip命令。利用gem命令,我们可以安装RedisDump,具体如下:

    gem install redis-dump

    执行完毕之后,即可完成RedisDump的安装。

  4. 验证安装

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

    redis-dump
    redis-load

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

1.6 Web库的安装

对于Web,我们应该都不陌生,现在日常访问的网站都是Web服务程序搭建而成的。Python同样不例外,也有一些这样的Web服务程序,比如Flask、Django等,我们可以拿它来开发网站和接口等。

在本书中,我们主要使用这些Web服务程序来搭建一些API接口,供我们的爬虫使用。例如,维护一个代理池,代理保存在Redis数据库中,我们要将代理池作为一个公共的组件使用,那么如何构建一个方便的平台来供我们获取这些代理呢?最合适不过的就是通过Web服务提供一个API接口,我们只需要请求接口即可获取新的代理,这样做简单、高效、实用!

书中用到的一些Web服务程序主要有Flask和Tornado,这里就分别介绍它们的安装方法。

1.6.1 Flask的安装

Flask是一个轻量级的Web服务程序,它简单、易用、灵活,这里主要用来做一些API服务。

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,命令如下:

    pip3 install flask

    运行完毕后,就完成安装了。

  3. 验证安装

    安装成功后,可以运行如下实例代码测试一下:

    from flask import Flask
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "Hello World!"
    
    if __name__ == "__main__":
        app.run()

    可以发现,系统会在5000端口开启Web服务,控制台输出如下:

     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

    直接访问http://127.0.0.1:5000/,可以观察到网页中呈现了Hello World!,如图1-40所示,一个最简单的Flask程序就运行成功了。

    图1-40 运行结果

  4. 结语

    后面,我们会利用Flask+Redis维护动态代理池和Cookies池。

1.6.2 Tornado的安装

Tornado是一个支持异步的Web框架,通过使用非阻塞I/O流,它可以支撑成千上万的开放连接,效率非常高,本节就来介绍一下它的安装方式。

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,相关命令如下:

    pip3 install tornado

    执行完毕后,即可完成安装。

  3. 验证安装

    同样,这里也可以用一个Hello World程序测试一下,代码如下:

    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,如图1-41所示,这就说明Tornado成功安装了。

    图1-41 运行结果

  4. 结语

    后面,我们会利用Tornado+Redis来搭建一个ADSL拨号代理池。

1.7 App爬取相关库的安装

除了Web网页,爬虫也可以抓取App的数据。App中的页面要加载出来,首先需要获取数据,而这些数据一般是通过请求服务器的接口来获取的。由于App没有浏览器这种可以比较直观地看到后台请求的工具,所以主要用一些抓包技术来抓取数据。

本书介绍的抓包工具有Charles、mitmproxy和mitmdump。一些简单的接口可以通过Charles或mitmproxy分析,找出规律,然后直接用程序模拟来抓取了。但是如果遇到更复杂的接口,就需要利用mitmdump对接Python来对抓取到的请求和响应进行实时处理和保存。另外,既然要做规模采集,就需要自动化App的操作而不是人工去采集,所以这里还需要一个工具叫作Appium,它可以像Selenium一样对App进行自动化控制,如自动化模拟App的点击、下拉等操作。

本节中,我们就来介绍一下Charles、mitmproxy、mitmdump、Appium的安装方法。

1.7.1 Charles的安装

Charles是一个网络抓包工具,相比Fiddler,其功能更为强大,而且跨平台支持得更好,所以这里选用它来作为主要的移动端抓包工具。

  1. 相关链接

  2. 下载Charles

    我们可以在官网下载最新的稳定版本,如图1-42所示。可以发现,它支持Windows、Linux和Mac三大平台。

    图1-42 Charles下载页面

    直接点击对应的安装包下载即可,具体的安装过程这里不再赘述。

    Charles是收费软件,不过可以免费试用30天。如果试用期过了,其实还可以试用,不过每次试用不能超过30分钟,启动有10秒的延时,但是完整的软件功能还是可以使用的,所以还算比较友好。

  3. 证书配置

    现在很多页面都在向HTTPS方向发展,HTTPS通信协议应用得越来越广泛。如果一个App通信应用了HTTPS协议,那么它通信的数据都会是被加密的,常规的截包方法是无法识别请求内部的数据的。

    安装完成后,如果我们想要做HTTPS抓包的话,那么还需要配置一下相关SSL证书。接下来,我们再看看各个平台下的证书配置过程。

    Charles是运行在PC端的,我们要抓取的是App端的数据,所以要在PC和手机端都安装证书。

    • Windows

      如果你的PC是Windows系统,可以按照下面的操作进行证书配置。

      首先打开Charles,点击Help→SSL Proxying→Install Charles Root Certificate,即可进入证书的安装页面,如图1-43所示。

      {%}

      图1-43 证书安装页面入口

      接下来,会弹出一个安装证书的页面,如图1-44所示。

      {%}

      图1-44 证书安装页面

      点击“安装证书”按钮,就会打开证书导入向导,如图1-45所示。

      {%}

      图1-45 证书导入向导

      直接点击“下一步”按钮,此时需要选择证书的存储区域,点击第二个选项“将所有的证书放入下列存储”,然后点击“浏览”按钮,从中选择证书存储位置为“受信任的根证书颁发机构”,再点击“确定”按钮,然后点击“下一步”按钮,如图1-46所示。

      {%}

      图1-46 选择证书存储区域

      再继续点击“下一步”按钮完成导入。

    • Mac

      如果你的PC是Mac系统,可以按照下面的操作进行证书配置。

      同样是点击Help→SSL Proxying→Install Charles Root Certificate,即可进入证书的安装页面。

      接下来,找到Charles的证书并双击,将“信任”设置为“始终信任”即可,如图1-47所示。

      {%}

      图1-47 证书配置

      这样就成功安装了证书。

    • iOS

      如果你的手机是iOS系统,可以按照下面的操作进行证书配置。

      首先,查看电脑的Charles代理是否开启,具体操作是点击Proxy→Proxy Settings,打开代理设置页面,确保当前的HTTP代理是开启的,如图1-48所示。这里的代理端口为8888,也可以自行修改。

      图1-48 代理设置

      接下来,将手机和电脑连在同一个局域网下。例如,当前电脑的IP为192.168.1.76,那么首先设置手机的代理为192.168.1.76:8888,如图1-49所示。

      {%}

      图1-49 代理设置

      设置完毕后,电脑上会出现一个提示窗口,询问是否信任此设备,如图1-50所示。

      {%}

      图1-50 提示窗口

      此时点击Allow按钮即可。这样手机就和PC连在同一个局域网内了,而且设置了Charles的代理,即Charles可以抓取到流经App的数据包了。

      接下来,再安装Charles的HTTPS证书。

      在电脑上打开Help→SSL Proxying→Install Charles Root Certificate on a Mobile Device or Remote Browser,如图1-51所示。

      {%}

      图1-51 证书安装页面入口

      此时会看到如图1-52所示的提示。

      {%}

      图1-52 提示窗口

      它提示我们在手机上设置好Charles的代理(刚才已经设置好了),然后在手机浏览器中打开chls.pro/ssl下载证书。

      在手机上打开chls.pro/ssl后,便会弹出证书的安装页面,如图1-53所示。

      {%}

      图1-53 证书安装页面

      点击“安装”按钮,然后输入密码即可完成安装,如图1-54所示。

      {%}

      图1-54 安装成功页面

      如果你的iOS版本是10.3以下的话,信任CA证书的流程就已经完成了。

      如果你的iOS版本是10.3及以上,还需要在“设置”→“通用”→“关于本机”→“证书信任设置”中将证书的完全信任开关打开,如图1-55所示。

      {%}

      图1-55 证书信任设置

    • Android

      如果你的手机是Android系统,可以按照下面的操作进行证书配置。

      在Android系统中,同样需要设置代理为Charles的代理,如图1-56所示。

      {%}

      图1-56 代理设置

      设置完毕后,电脑上就会出现一个提示窗口,询问是否信任此设备,如图1-50所示,此时直接点击Allow按钮即可。

      接下来,像iOS设备那样,在手机浏览器上打开chls.pro/ssl,这时会出现一个提示框,如图1-57所示。

      {%}

      图1-57 证书安装页面

      我们为证书添加一个名称,然后点击“确定”按钮即可完成证书的安装。

  4. 开启SSL 监听

    点击Proxy→SSLProxying Settings,在弹出的窗口中点击 Add 按钮,添加需要监听的地址和端口。如果需要监听所有的 HTTPS 请求,可以直接将地址和端口设置为 *,即添加一条 *:* 的配置,如图 1-58 所示。这样配置好了,我们就可以抓到所有 HTTPS 请求包了。如果不配置的话,抓到的 HTTPS 请求包状态可能是 unknown。

    图1-58 SSL Proxying Settings

1.7.2 mitmproxy的安装

mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler、Charles的功能,只不过它通过控制台的形式操作。

此外,mitmproxy还有两个关联组件,一个是mitmdump,它是mitmproxy的命令行接口,利用它可以对接Python脚本,实现监听后的处理;另一个是mitmweb,它是一个Web程序,通过它以清楚地观察到mitmproxy捕获的请求。

本节中,我们就来了解一下mitmproxy、mitmdump和mitmweb的安装方式。

  1. 相关链接

  2. pip安装

    最简单的安装方式还是使用pip,直接执行如下命令即可安装:

    pip3 install mitmproxy

    这是最简单和通用的安装方式,执行完毕之后即可完成mitmproxy的安装,另外还附带安装了mitmdump和mitmweb这两个组件。如果不想用这种方式安装,也可以选择后面列出的专门针对各个平台的安装方式或者Docker安装方式。

  3. Windows下的安装

    可以到GitHub上的Releases页面(链接为:https://github.com/mitmproxy/mitmproxy/releases/)获取安装包,如图1-59所示。

    图1-59 下载页面

    比如,当前的最新版本为2.0.2,则可以选择下载Windows下的exe安装包mitmproxy-2.0.2-windows-installer.exe,下载后直接双击安装包即可安装。

    注意,在Windows上不支持mitmproxy的控制台接口,但是可以使用mitmdump和mitmweb。

  4. Linux下的安装

    在Linux下,可以下载编译好的二进制包(下载地址https://github.com/mitmproxy/mitmproxy/releases/),此发行包一般是最新版本,它包含了最新版本的mitmproxy和内置的Python 3环境,以及最新的OpenSSL环境。

    如果你的环境里没有Python 3和OpenSSL环境,建议使用此种方式安装。

    下载之后,需要解压并将其配置到环境变量:

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

    这样就可以将3个可执行文件移动到了/usr/bin目录。而一般情况下,/usr/bin目录都已经配置在了环境变量下,所以接下来可以直接调用这3个工具了。

  5. Mac下的安装

    Mac下的安装非常简单,直接使用Homebrew即可,命令如下:

    brew install mitmproxy

    执行命令后,即可完成mitmproxy的安装。

  6. Docker安装

    mitmproxy也支持Docker,其DockerHub的地址为https://hub.docker.com/r/mitmproxy/mitmproxy/

    在Docker下,mitmproxy的安装命令为:

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

    这样就在8080端口上启动了mitmproxy和mitmdump。

    如果想要获取CA证书,可以选择挂载磁盘选项,命令如下:

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

    这样就可以在~/.mitmproxy目录下找到CA证书。

    另外,还可以在8081端口上启动mitmweb,命令如下:

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

    更多启动方式可以参考Docker Hub的安装说明。

  7. 证书配置

    对于mitmproxy来说,如果想要截获HTTPS请求,就需要设置证书。mitmproxy在安装后会提供一套CA证书,只要客户端信任了mitmproxy提供的证书,就可以通过mitmproxy获取HTTPS请求的具体内容,否则mitmproxy是无法解析HTTPS请求的。

    首先,运行以下命令产生CA证书,并启动mitmdump:

    mitmdump

    接下来,我们就可以在用户目录下的.mitmproxy目录里面找到CA证书,如图1-60所示。

    {%}

    图1-60 证书文件

    证书一共5个,表1-1简要说明了这5个证书。

    表1-1 5个证书及其说明

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

    下面我们介绍一下Windows、Mac、iOS和Android平台下的证书配置过程。

    • Windows

      双击mitmproxy-ca.p12,就会出现导入证书的引导页,如图1-61所示。

      {%}

      图1-61 证书导入向导

      直接点击“下一步”按钮即可,会出现密码设置提示,如图1-62所示。

      {%}

      图1-62 密码设置提示

      这里不需要设置密码,直接点击“下一步”按钮即可。

      接下来需要选择证书的存储区域,如图1-63所示。这里点击第二个选项“将所有的证书都放入下列存储”,然后点击“浏览”按钮,选择证书存储位置为“受信任的根证书颁发机构”,接着点击“确定”按钮,然后点击“下一步”按钮。

      {%}

      图1-63 选择证书存储区域

      最后,如果有安全警告弹出,如图1-64所示,直接点击“是”按钮即可。

      {%}

      图1-64 安全警告

      这样就在Windows下配置完CA证书了。

    • Mac

      Mac下双击mitmproxy-ca-cert.pem即可弹出钥匙串管理页面,然后找到mitmproxy证书,打开其设置选项,选择“始终信任”即可,如图1-65所示。

      {%}

      图1-65 证书配置

    • iOS

      将mitmproxy-ca-cert.pem文件发送到iPhone上,推荐使用邮件方式发送,然后在iPhone上可以直接点击附件并识别安装,如图1-66所示。

      {%}

      图1-66 证书安装页面

      点击“安装”按钮之后,会跳到安装描述文件的页面,点击“安装”按钮,此时会有警告提示,如图1-67所示。

      {%}

      图1-67 安装警告页面v

      继续点击右上角的“安装”按钮,安装成功之后会有已安装的提示,如图1-68所示。

      {%}

      图1-68 安装成功页面

      如果你的iOS版本是10.3以下的话,此处信任CA证书的流程就已经完成了。

      如果你的iOS版本是10.3及以上版本,还需要在“设置”→“通用”→“关于本机”→“证书信任设置”将mitmproxy的完全信任开关打开,如图1-69所示。此时,在iOS上配置信任CA证书的流程就结束了。

      {%}

      图1-69 证书信任设置

    • Android

      在Android手机上,同样需要将证书mitmproxy-ca-cert.pem文件发送到手机上,例如直接复制文件。

      接下来,点击证书,便会出现一个提示窗口,如图1-70所示。

      {%}

      图1-70 证书安装页面

      这时输入证书的名称,然后点击“确定”按钮即可完成安装。

1.7.3 Appium的安装

Appium是移动端的自动化测试工具,类似于前面所说的Selenium,利用它可以驱动Android、iOS等设备完成自动化测试,比如模拟点击、滑动、输入等操作,其官方网站为:http://appium.io/。本节中,我们就来了解一下Appium的安装方式。

  1. 相关链接

  2. 安装Appium

    首先,需要安装Appium。Appium负责驱动移动端来完成一系列操作,对于iOS设备来说,它使用苹果的UIAutomation来实现驱动;对于Android来说,它使用UIAutomator和Selendroid来实现驱动。

    同时Appium也相当于一个服务器,我们可以向它发送一些操作指令,它会根据不同的指令对移动设备进行驱动,以完成不同的动作。

    安装Appium有两种方式,一种是直接下载安装包Appium Desktop来安装,另一种是通过Node.js来安装,下面我们介绍一下这两种安装方式。

    • Appium Desktop

      Appium Desktop支持全平台的安装,我们直接从GitHub的Releases里面安装即可,链接为https://github.com/appium/appium-desktop/releases。目前的最新版本是1.1,下载页面如图1-71所示。

      图1-71 下载页面

      Windows平台可以下载exe安装包appium-desktop-Setup-1.1.0.exe,Mac平台可以下载dmg安装包如appium-desktop-1.1.0.dmg,Linux平台可以选择下载源码,但是更推荐用Node.js安装方式。

      安装完成后运行,看到的页面如图1-72所示。

      图1-72 运行页面

      如果出现此页面,则证明安装成功。

    • Node.js

      首先需要安装Node.js,具体的安装方式可以参见http://www.runoob.com/nodejs/nodejs-install-setup.html,安装完成之后就可以使用npm命令了。

      接下来,使用npm命令全局安装Appium即可:

      npm install -g appium

      此时等待命令执行完成即可,这样就成功安装了Appium。

  3. Android开发环境配置

    如果我们要使用Android设备做App抓取的话,还需要下载和配置Android SDK,这里推荐直接安装Android Studio,其下载地址为https://developer.android.com/studio/index.html?hl=zh-cn。下载后直接安装即可。

    然后,我们还需要下载Android SDK。直接打开首选项里面的Android SDK设置页面,勾选要安装的SDK版本,点击OK按钮即可下载和安装勾选的SDK版本,如图1-73所示。

    图1-73 Android SDK设置页面

    另外,还需要配置一下环境变量,添加ANDROID_HOME为Android SDK所在路径,然后再添加SDK文件夹下的tools和platform-tools文件夹到PATH中。

    更详细的配置可以参考Android Studio的官方文档:https://developer.android.com/studio/intro/index.html

  4. 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

1.8 爬虫框架的安装

我们直接用requests、Selenium等库写爬虫,如果爬取量不是太大,速度要求不高,是完全可以满足需求的。但是写多了会发现其内部许多代码和组件是可以复用的,如果我们把这些组件抽离出来,将各个功能模块化,就慢慢会形成一个框架雏形,久而久之,爬虫框架就诞生了。

利用框架,我们可以不用再去关心某些功能的具体实现,只需要关心爬取逻辑即可。有了它们,可以大大简化代码量,而且架构也会变得清晰,爬取效率也会高许多。所以,如果有一定的基础,上手框架是一种好的选择。

本书主要介绍的爬虫框架有pyspider和Scrapy。本节中,我们来介绍一下pyspider、Scrapy及其扩展库的安装方式。

1.8.1 pyspider的安装

pyspider是国人binux编写的强大的网络爬虫框架,它带有强大的WebUI、脚本编辑器、任务监控器、项目管理器以及结果处理器,同时支持多种数据库后端、多种消息队列,另外还支持JavaScript渲染页面的爬取,使用起来非常方便,本节介绍一下它的安装过程。

  1. 相关链接

  2. 准备工作

    pyspider是支持JavaScript渲染的,而这个过程是依赖于PhantomJS的,所以还需要安装PhantomJS(具体的安装过程详见1.2.5节)。

  3. pip安装

    这里推荐使用pip安装,命令如下:

    pip3 install pyspider

    命令执行完毕即可完成安装。

  4. 常见错误

    Windows下可能会出现这样的错误提示:

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

    这是PyCurl安装错误,此时需要安装PyCurl库。从http://www.lfd.uci.edu/~gohlke/pythonlibs/#pycurl找到对应的Python版本,然后下载相应的wheel文件即可。比如Windows 64位、Python 3.6,则需要下载pycurl-7.43.0-cp36-cp36m-win_amd64.whl,随后用pip安装即可,命令如下:

    pip3 install pycurl-7.43.0-cp36-cp36m-win_amd64.whl

    如果在Linux下遇到PyCurl的错误,可以参考本文:https://imlonghao.com/19.html

  5. 验证安装

    安装完成之后,可以直接在命令行下启动pyspider:

    pyspider all

    此时控制台会有类似如图1-74所示的输出。

    图1-74 控制台

    这时pyspider的Web服务就会在本地5000端口运行。直接在浏览器中打开http://localhost:5000/,即可进入pyspider的WebUI管理页面,如图1-75所示,这证明pyspider已经安装成功了。

    图1-75 管理页面

    后面,我们会详细介绍pyspider的用法。

1.8.2 Scrapy的安装

Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted 14.0、lxml 3.4和pyOpenSSL 0.14。在不同的平台环境下,它所依赖的库也各不相同,所以在安装之前,最好确保把一些基本库安装好。本节就来介绍Scrapy在不同平台的安装方法。

  1. 相关链接

  2. Anaconda安装

    这是一种比较简单的安装Scrapy的方法(尤其是对于Windows来说),如果你的Python是使用Anaconda安装的,或者还没有安装Python的话,可以使用此方法安装,这种方法简单、省力。当然,如果你的Python不是通过Anaconda安装的,可以继续看后面的内容。

    关于Anaconda的安装方式,可以查看1.1节,在此不再赘述。

    如果已经安装好了Anaconda,那么可以通过conda命令安装Scrapy,具体如下:

    conda install Scrapy
  3. Windows下的安装

    如果你的Python不是使用Anaconda安装的,可以参考如下方式来一步步安装Scrapy。

    • 安装lxml

      lxml的安装过程请参见1.3.1节,在此不再赘述,此库非常重要,请一定要安装成功。

    • 安装pyOpenSSL

      在官方网站下载wheel文件(详见https://pypi.python.org/pypi/pyOpenSSL#downloads)即可,如图1-76所示。

      {%}

      图1-76 下载页面

      下载后利用pip安装即可:

      pip3 install pyOpenSSL-17.2.0-py2.py3-none-any.whl
    • 安装Twisted

      http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted下载wheel文件,利用pip安装即可。

      比如,对于Python 3.6版本、Windows 64位系统,则当前最新版本为Twisted-17.5.0-cp36-cp36m-win_amd64.whl,直接下载即可,如图1-77所示。

      {%}

      图1-77 下载页面

      然后通过pip安装:

      pip3 install Twisted-17.5.0-cp36-cp36m-win_amd64.whl
    • 安装PyWin32

      从官方网站下载对应版本的安装包即可,链接为:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/,如图1-78所示。

      {%}

      图1-78 下载列表

      比如对于Python 3.6版本,可以选择下载pywin32-221.win-amd64-py3.6.exe,下载完毕之后双击安装即可。

      注意,这里使用的是Build 221版本,随着时间推移,版本肯定会继续更新,最新的版本可以查看https://sourceforge.net/projects/pywin32/files/pywin32/,到时查找最新的版本安装即可。

    • 安装Scrapy

      安装好了以上的依赖库后,安装Scrapy就非常简单了,这里依然使用pip,命令如下:

      pip3 install Scrapy

      等待命令结束,如果没有报错,就证明Scrapy已经安装好了。

  4. Linux下的安装

    在Linux下的安装方式依然分为两类平台来介绍。

    • CentOS和Red Hat

      在CentOS和Red Hat下,首先确保一些依赖库已经安装,运行如下命令:

      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

      在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

      运行完毕后,就完成Scrapy的安装了。

  5. Mac下的安装

    在Mac下,首先也是进行依赖库的安装。

    在Mac上构建Scrapy的依赖库需要C编译器以及开发头文件,它一般由Xcode提供,具体命令如下:

    xcode-select --install

    随后利用pip安装Scrapy即可:

    pip3 install Scrapy
  6. 验证安装

    安装之后,在命令行下输入scrapy,如果出现类似如图1-79所示的结果,就证明Scrapy安装成功了。

    图1-79 验证安装

  7. 常见错误

    在安装过程中,常见的错误汇总如下。

    • pkg_resources.VersionConflict: (six 1.5.2 (/usr/lib/python3/dist-packages), Requirement.parse('six>=1.6.0'))

      这是six包版本过低出现的错误。six包是一个提供兼容Python 2和Python 3的库,这时升级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和Red Hat下,直接执行如下命令即可:

      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

1.8.3 Scrapy-Splash的安装

Scrapy-Splash是一个Scrapy中支持JavaScript渲染的工具,本节来介绍它的安装方式。

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

  1. 相关链接

  2. 安装Splash

    Scrapy-Splash会使用Splash的HTTP API进行页面渲染,所以我们需要安装Splash来提供渲染服务。这里通过Docker安装,在这之前请确保已经正确安装好了Docker。

    安装命令如下:

    docker run -p 8050:8050 scrapinghub/splash

    安装完成之后,会有类似的输出结果:

    2017-07-03 08:53:28+0000 [-] Log opened.
    2017-07-03 08:53:28.447291 [-] Splash version: 3.0
    2017-07-03 08:53:28.452698 [-] Qt 5.9.1, PyQt 5.9, WebKit 602.1, sip 4.19.3, Twisted 16.1.1, Lua 5.2
    2017-07-03 08:53:28.453120 [-] Python 3.5.2 (default, Nov 17 2016, 17:05:23) [GCC 5.4.0 20160609]
    2017-07-03 08:53:28.453676 [-] Open files limit: 1048576
    2017-07-03 08:53:28.454258 [-] Can't bump open files limit
    2017-07-03 08:53:28.571306 [-] Xvfb is started: ['Xvfb', ':1599197258', '-screen', '0', '1024x768x24',
        '-nolisten', 'tcp']
    QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
    2017-07-03 08:53:29.041973 [-] proxy profiles support is enabled, proxy profiles path:
        /etc/splash/proxy-profiles
    2017-07-03 08:53:29.315445 [-] verbosity=1
    2017-07-03 08:53:29.315629 [-] slots=50
    2017-07-03 08:53:29.315712 [-] argument_cache_max_entries=500
    2017-07-03 08:53:29.316564 [-] Web UI: enabled, Lua: enabled (sandbox: enabled)
    2017-07-03 08:53:29.317614 [-] Site starting on 8050
    2017-07-03 08:53:29.317801 [-] Starting factory <twisted.web.server.Site object at 0x7ffaa4a98cf8>

    这样就证明Splash已经在8050端口上运行了。这时我们打开http://localhost:8050,即可看到Splash的主页,如图1-80所示。

    图1-80 运行页面

    当然,Splash也可以直接安装在远程服务器上。我们在服务器上以守护态运行Splash即可,命令如下:

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

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

  3. Scrapy-Splash的安装

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

    pip3 install scrapy-splash

    命令运行完毕后,就会成功安装好此库,后面会详细介绍它的用法。

1.8.4 Scrapy-Redis的安装

Scrapy-Redis是Scrapy的分布式扩展模块,有了它,我们就可以方便地实现Scrapy分布式爬虫的搭建。本节中,我们将介绍Scrapy-Redis的安装方式。

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,命令如下:

    pip3 install scrapy-redis
  3. wheel安装

    此外,也可以到PyPI下载wheel文件安装(详见https://pypi.python.org/pypi/scrapy-redis#downloads),如当前的最新版本为0.6.8,则可以下载scrapy_redis-0.6.8-py2.py3-none-any.whl,然后通过pip安装即可:

    pip3 install scrapy_redis-0.6.8-py2.py3-none-any.whl
  4. 测试安装

    安装完成之后,可以在Python命令行下测试:

    $ python3
    >>> import scrapy_redis

    如果没有错误报出,则证明库已经安装好了。

1.9 部署相关库的安装

如果想要大规模抓取数据,那么一定会用到分布式爬虫。对于分布式爬虫来说,我们需要多台主机,每台主机有多个爬虫任务,但是源代码其实只有一份。此时我们需要做的就是将一份代码同时部署到多台主机上来协同运行,那么怎么去部署就是另一个值得思考的问题。

对于Scrapy来说,它有一个扩展组件,叫作Scrapyd,我们只需要安装该扩展组件,即可远程管理Scrapy任务,包括部署源码、启动任务、监听任务等。另外,还有Scrapyd-Client和Scrapyd API来帮助我们更方便地完成部署和监听操作。

另外,还有一种部署方式,那就是Docker集群部署。我们只需要将爬虫制作为Docker镜像,只要主机安装了Docker,就可以直接运行爬虫,而无需再去担心环境配置、版本问题。

本节中,我们就来介绍相关环境的配置过程。

1.9.1 Docker的安装

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

对于爬虫来说,如果我们需要大规模部署爬虫系统的话,用Docker会大大提高效率。工欲善其事,必先利其器。

本节中,我们就来介绍三大平台下Docker的安装方式。

  1. 相关链接

  2. Windows下的安装

    如果你的是64位Windows 10系统,那么推荐使用Docker for Windows。此时直接从Docker官方网站下载最新的Docker for Windows 安装包即可:https://docs.docker.com/docker-for-windows/install/

    如果不是64位Windows 10系统,则可以下载Docker Toolbox:https://docs.docker.com/toolbox/toolbox_install_windows/

    下载后直接双击安装即可,详细过程可以参考文档说明。安装完成后,进入命令行。

    运行docker命令测试:

    docker

    运行结果如图1-81所示,这就证明Docker安装成功了。

    图1-81 运行结果

  3. Linux下的安装

    详细的步骤安装说明可以参见官方文档:https://docs.docker.com/engine/installation/linux/ubuntu/

    官方文档中详细说明了不同Linux系统的安装方法,根据文档一步步执行即可安装成功。但是为了使安装更加方便,Docker官方还提供了一键安装脚本。使用它,会使安装更加便捷,不用再去一步步执行命令安装了。

    首先是Docker官方提供的安装脚本。相比其他脚本,官方提供的一定更靠谱,安装命令如下:

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

    只要执行如上一条命令,等待一会儿Docker便会安装完成,这非常方便。

    但是使用官方脚本安装有一个缺点,那就是慢,也可能下载超时,所以为了加快下载速度,我们可以使用国内的镜像来安装,所以这里还有阿里云和DaoCloud的安装脚本。

    阿里云的安装脚本:

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

    DaoCloud的安装脚本:

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

    这两个脚本可以任选其一,速度都非常不错。

    等待脚本执行完毕之后,就可以使用Docker相关命令了,如运行测试Hello World镜像:

    docker run hello-world

    运行结果:

    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    78445dd45222: Pull complete
    Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
    Status: Downloaded newer image for hello-world:latest
    Hello from Docker!
    This message shows that your installation appears to be working correctly.

    如果出现类似上面提示的内容,则证明Docker可以正常使用了。

  4. 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

    另外,也可以手动下载安装包(下载地址为:https://download.docker.com/mac/stable/Docker.dmg)安装。

    下载完成后,直接双击安装包,然后将程序拖动到应用程序中即可。

    点击程序图标运行Docker,会发现在菜单栏中出现了Docker的图标,如图1-82中的第三个小鲸鱼图标。

    图1-82 菜单栏

    点击小鲸鱼图标,展开菜单之后,再点击Start按钮即可启动Docker。启动成功后,便会提示Docker is running,如图1-83所示。

    图1-83 运行页面

    随后,我们就可以在命令行下使用Docker命令了。

    可以使用如下命令测试运行:

    sudo docker run hello-world

    运行结果如图1-84所示,这就证明Docker已经成功安装了。

    图1-84 运行结果

    如果系统不满足要求,可以下载Docker Toolbox,其安装说明为:https://docs.docker.com/toolbox/overview/

    关于Docker for Mac和Docker Toolbox的区别,可以参见:https://docs.docker.com/docker-for-mac/docker-toolbox/

  5. 镜像加速

    安装好Docker之后,在运行测试命令时,我们会发现它首先会下载一个Hello World的镜像,然后将其运行。但是这里的下载速度有时候会非常慢,这是因为它默认还是从国外的Docker Hub下载的。因此,为了提高镜像的下载速度,我们还可以使用国内镜像来加速下载,于是就有了Docker加速器一说。

    推荐的Docker加速器有DaoCloud(详见https://www.daocloud.io/mirror)和阿里云(详见https://cr.console.aliyun.com/#/accelerator)。

    不同平台的镜像加速方法配置可以参考DaoCloud的官方文档:http://guide.daocloud.io/dcs/daocloud-9153151.html

    配置完成之后,可以发现镜像的下载速度会快非常多。

1.9.2 Scrapyd的安装

Scrapyd是一个用于部署和运行Scrapy项目的工具,有了它,你可以将写好的Scrapy项目上传到云主机并通过API来控制它的运行。

既然是Scrapy项目部署,基本上都使用Linux主机,所以本节的安装是针对于Linux主机的。

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,命令如下:

    pip3 install scrapyd
  3. 配置

    安装完毕之后,需要新建一个配置文件/etc/scrapyd/scrapyd.conf,Scrapyd在运行的时候会读取此配置文件。

    在Scrapyd 1.2版本之后,不会自动创建该文件,需要我们自行添加。

    首先,执行如下命令新建文件:

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

    接着写入如下内容:

    [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,以使外网可以访问。

  4. 后台运行

    Scrapyd是一个纯Python项目,这里可以直接调用它来运行。为了使程序一直在后台运行,Linux和Mac可以使用如下命令:

    (scrapyd > /dev/null &)

    这样Scrapyd就会在后台持续运行了,控制台输出直接忽略。当然,如果想记录输出日志,可以修改输出目标,如:

    (scrapyd > ~/scrapyd.log &)

    此时会将Scrapyd的运行结果输出到~/scrapyd.log文件中。

    当然也可以使用screen、tmux、supervisor等工具来实现进程守护。

    运行之后,便可以在浏览器的6800端口访问Web UI了,从中可以看到当前Scrapyd的运行任务、日志等内容,如图1-85所示。

    图1-85 Scrapyd首页

    当然,运行Scrapyd更佳的方式是使用Supervisor守护进程,如果感兴趣,可以参考:http://supervisord.org/

    另外,Scrapyd也支持Docker,后面我们会介绍Scrapyd Docker镜像的制作和运行方法。

  5. 访问认证

    配置完成后,Scrapyd和它的接口都是可以公开访问的。如果想配置访问认证的话,可以借助于Nginx做反向代理,这里需要先安装Nginx服务器。

    在此以Ubuntu为例进行说明,安装命令如下:

    sudo apt-get install nginx

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

    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的访问认证了。

1.9.3 Scrapyd-Client的安装

在将Scrapy代码部署到远程Scrapyd的时候,第一步就是要将代码打包为EGG文件,其次需要将EGG文件上传到远程主机。这个过程如果用程序来实现,也是完全可以的,但是我们并不需要做这些工作,因为Scrapyd-Client已经为我们实现了这些功能。

下面我们就来看看Scrapyd-Client的安装过程。

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,相关命令如下:

    pip3 install scrapyd-client
  3. 验证安装

    安装成功后会有一个可用命令,叫作scrapyd-deploy,即部署命令。

    我们可以输入如下测试命令测试Scrapyd-Client是否安装成功:

    scrapyd-deploy -h

    如果出现类似如图1-86所示的输出,则证明Scrapyd-Client已经成功安装。

    图1-86 运行结果

1.9.4 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就为它做了一层封装,下面我们来看下它的安装方式。

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,命令如下:

    pip install python-scrapyd-api
  3. 验证安装

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

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

    运行结果如下:

    ["myproject", "otherproject"]

    这样我们便可以用Python直接来获取各个主机上Scrapy任务的运行状态了。

1.9.5 Scrapyrt的安装

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

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,命令如下:

    pip3 install scrapyrt

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

    scrapyrt

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

    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

    这样就会在9081端口上运行了。

  3. Docker安装

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

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

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

1.9.6 Gerapy的安装

Gerapy是一个Scrapy分布式管理模块,本节就来介绍一下它的安装方式。

  1. 相关链接

  2. pip安装

    这里推荐使用pip安装,命令如下:

    pip3 install gerapy
  3. 测试安装

    安装完成后,可以在Python命令行下测试:

    $ python3
    >>> import gerapy

    如果没有错误报出,则证明库已经安装好了。

目录