随着互联网的快速发展越来越多的信息被发布到互联网上,这些信息被嵌入到各种各样的网页结构及样式中。虽然搜索引擎可以辅助用户搜索这些网页信息,但是通用的搜索引擎的目标是尽可能覆盖全网络,对用户特定的目的和需求是无法满足的,在特殊需求的刺激下,网络爬虫迅速发展起来,成为了互联网中采集大量数据的新方法。网络爬虫作为采集互联网数据的一种常用工具,近年来受到很多互联网企业的青睐,由此而生的网络爬虫工程师也一度成为大家追捧的高薪职业。本章主要介绍网络爬虫,认识爬虫是什么,爬虫的主要类型,爬虫的原理,网络爬虫的合法性以及反爬虫的主要目的与手段。
网络爬虫是一种程序,编写网络爬虫的主要目的是从互联网上的各式各样的网页结构中提取出相关的数据。如果把互联网比喻成蜘蛛网,网络爬虫就像是蜘蛛网上的蜘蛛,沿着URL的丝线进行数据的爬取,因此常把爬虫成为Spider。
网络爬虫按照其系统结构和运作原理,大致可以分为四种类型:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。
1.通用网络爬虫
通用网络爬虫又称全网爬虫,爬取对象从一批URL种子扩充到整个Web,主要为搜索引擎、门户网站、大型Web服务提供商使用。这类爬虫的爬取范围和数量非常庞大,对于爬虫的速度和存储的空间都有着比较高的要求,通常采用并行方式应对大量的待刷新页面。
2.聚焦网络爬虫
聚焦网络爬虫又被称作主题网络爬虫,选择性地爬取那些预先定义好的主题相关页面。聚焦网络爬虫仅需爬取与主题相关的页面,极大地节省了硬件和网络资源,保存的页面数量较少,因此能更快地更新保存页面,更好的满足特定人群的对特定领域信息的需求。聚焦网络爬虫是我们需要关注的重点爬虫类型。
3.增量式网络爬虫
增量式网络爬虫仅对已下载网页采取增量式更新或者已经发生变化的网页的爬虫,这种机制能够在一定程度上保证所爬取的页面尽可能的新。与周期性爬取和刷新页面的网络爬虫相比,增量式爬虫只会在需要时爬取新产生或者有更新的网页,对于没有变化的网页则不会进行爬取,这样能够既减少数据下载量又能及时更新已爬取过的网页,减少时间和空间的浪费,但是该爬取算法的实现难度和复杂度都较高。
4.深层页面爬虫
Web页面按照存在的方式可以分为表层网页和深层网页。表层网页是传统搜索引擎可以索引到的页面,以超链接可以到达的静态页面为主。深层页面是指大部分内容不能通过静态链接获取的,隐藏在搜索表单后的,需要用户提交一些关键词后才能获得的Web页面。例如,用户需要登录后内容才可见的网站。深层网页中可访问的信息量较大,是目前互联网上发展最快和最大的信息资源。
爬虫能够模拟浏览器向网站的服务器端发送请求,并从得到的响应内容中提取出需要的信息,然后持久化的存储到本地文件或者数据库中。
网络爬虫的三个任务主要是下载目标网页、从网页中解析信息,存储。为了完成这三个任务,简单网络爬虫的需要包含四个部分,如图1-1所示:
URL管理器:生成和管理需要爬取的URL地址,防止重复爬取和循环爬取。
网页下载器:向URL地址发送请求,获取URL对应的网页代码并下载到本地。
网页解析器:从下载器获取的网页代码中提取有价值的数据,属于爬虫的核心。
输出管理器:将解析器提取出来的数据输出到文件或者数据库进行持久化保存。
以上四个部分组成一个简单的爬虫结构。
1.爬虫的合法性
目前,多数网站允许将爬虫爬取的数据用于个人使用或者科学研究。但是如果将爬取的数据用于其他用途,特别是转载或者商业用途,则依据各网站的具体情况有不同的后果,严重的将会触犯法律或者引起民事纠纷。我国对网络爬虫技术也有明确的相关要求:
一、网络爬虫不可以干扰网站的正常运营
《数据安全管理办法》第十六条:利用自动化手段访问收集网站数据,不得妨碍网站正常运行;此类行为严重影响网站运行,如自动化访问收集流量超过网站日均流量三分之一,网站要求停止自动化访问收集时,应当停止。
二、不可以爬取受法律保护的特定类型数据或信息
《中华人民共和国网络安全法》第四十一条:收集、使用个人信息,应当遵循合法、正当、必要的原则,公开收集、使用规则,明示收集、使用信息的目的、方式和范围,并经被收集者同意。
网络运营者不得收集与其提供的服务无关的个人信息,不得违反法律、行政法规的规定和双方的约定收集、使用个人信息,并应当依照法律、行政法规的规定和与用户的约定,处理其保存的个人信息。
《网络安全法》第四十四条:任何个人和组织不得窃取或者以其他非法方式获取个人信息。
《中华人民共和国刑法》第二百八十五条:获取计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,处三年以下有期徒刑或者拘役,并处或者单处罚金; 最高处七年有期徒刑并处罚金。
《中华人民共和国刑法》第二百八十六条:违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
除此以外,还需要注意版权相关问题,有作者署名的受版权保护的内容不允许爬取后随意转载和用于商业用途。
2.robot.txt协议
robots协议也叫robots.txt是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络爬虫,此网站中哪些内容是不应被爬取,哪些是可以被爬取的。在一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt一般放置于网站的根目录下。robots.txt协议并不是一份规范,只是一个约定俗成的协议。爬虫应该遵守这份协议,否则有可能会被网站所有者封禁IP。甚至有些网站会进一步采取法律手段维护自己的权益。著名的360与百度之争中,由于360没有遵守百度的robots.txt协议,爬取了百度网站的内容,最终被判处70万元的罚款。可以在网站URL地址后加/robots.txt查看该协议,以下是各网站的robots.txt协议地址:
www.taobao.com/robots.txt
www.baidu.com/robots.txt
www.nike.com/robots.txt # 有点意思
因此爬虫开发者在使用爬虫时应注意:
爬虫会消耗大量的服务器资源,影响服务器的稳定性,增加运营的网络成本,同时网站的资源有极大的可能被竞争对手获取到,造成竞争力的下降。因此网站开发人员通常会设法阻止爬虫获取自家网站的资源,针对爬虫做出限制措施。爬虫的行为与一般用户访问网站的行为类似,网站开发人员在进行反爬虫时会尽可能减少对普通用户的干扰,网站针对爬虫的检测方法通常分为以下几种:
1.通过User-Agent校验反爬
使用浏览器发送请求时,会附带一部分用户使用浏览器和系统环境的参数给服务器,这个信息会被放在HTTP请求的Headers中的Request Headers中,服务器会通过User-Agent的值来区分不同的浏览器和系统,图1-2展示了Chrome浏览器中某个网页的User-Agent,快捷键F12进入浏览器的开发者工具,Network选项中随便选则一个数据包单击,查看Headers中的信息,如图1-2所示:
2.通过访问频率反爬
爬虫程序在模拟用户向网站服务器发送请求的速度要比普通用户通过浏览器访问网站的速度快很多,所以不少网站通过对访问频率设定一个阈值,如果同一个IP单位时间内的访问频率超过设定的阈值就会触发反爬机制,网站就会对这个IP做出限制。一般情况下会先提示该IP需要进行验证码验证后才能够继续正常访问,严重时网站甚至会在一段时间内禁止该IP的访问。
3.通过验证码校验反爬
有些验证码是为了反爬设计的,例如爬取频率触发阈值时会提示验证码验证,必须通过验证,证明用户的正常用户不是爬虫,才可以正常浏览网页。但是,有些网站的在登录和注册时也需要验证码验证,这种情况与访问频率相关。
4.通过变化网页结构反爬
大部分情况下爬虫是通过网页结构来解析数据的,有些网站常常会更换网页结构,网页结构变换后爬虫便无法在原本的网页位置找到需要的内容,这样在一定程度上可以起到反爬的作用,但是大多数情况变换网页结构的目的仅仅是为了优化网页结构吸引用户。
5.通过帐号权限反爬
现在有很多网站都需要登录后才能进一步浏览网页信息,这种操作虽然并不是为了反爬虫设计的,但是一定程度上也起到了反爬虫的作用。
Python中整合了许多用于爬虫开发的库,使用Python开发爬虫需要了解Python中常用的爬虫库,各爬虫库的特征、功能和配置方法。本书中主要在Windows环境下安装配置Python和爬虫需要的库。
Python语言具有简单易学的特点,但想用好也会有难点,难点之一就是包的管理和Python的不同版本之间是否兼容的问题,特别是在使用Windows环境的时候。为了解决这个问题,于是就发行出比如WinPython、Anaconda等各种集成环境,这些集成环境将Python和许多常用的科学包打包在一起,方便使用者直接安装使用。
Anaconda是其中一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。Anaconda支持 Linux, MacOS, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。Anaconda利用工具/命令conda来进行package和environment的管理,并且已经包含了Python和相关的配套工具。
Anaconda具有开源,安装过程简单,高性能使用Python语言,免费的社区支持等特点。其特点的实现主要是基于Anaconda拥有conda包,环境管理器,1000+开源库的支持。
下载安装Anaconda流程如下:
(1)、Anaconda官方网址:https://www.anaconda.com/。 进入官网后点击Get Started按钮,然后进入菜单页,如图1-3所示:
(2)、单击Download Anaconda installers,进入下载页面,然后使用鼠标滚轮移动页面到达下载页面底部,Anaconda提供了三种操作系统(Windows、macOS、Linux)的安装包,处于本下载页的安装包均提供了最近版本的Python,如图1-4所示:
(3)、选择满足计算机操作系统的安装包进行下载安装。Anaconda提供了180多个科学包,因此安装包比较大,大约500MB,如果觉得Anaconda安装包太大,可以选择安装另一个小版本Miniconda进行下载安装,点击here可跳转到Miniconda下载页面,点击archive可跳转到其他版本的Python下载页面,如图1-5所示:
(4)、Miniconda只提供了支持Python使用的必要的包,并未提供完全的180多个包,因此安装包比较小,大约只有60MB。Miniconda也提供了三种操作系统(Windows、macOS、Linux)的安装包,本书主要使用Windows 64位系统,因此选择Miniconda3 Windows 64-bit进行下载安装,选择Python 3.9版本,如图1-6所示:
下载完成后双击安装包即可开始安装,安装流程如下:
(1)、双击安装包开始安装,弹出安装窗口,如图1-7所示:
(2)、单击Next按钮进入下一步,License Agreement为许可证协议,必须同意该协议才可以进入下一步安装流程,仔细阅读协议内容可点击I Agree接收协议进行下一步,如图1-8所示:
(3)、选择安装类型,Just Me只为当前用户安装,这种模式可以自主选择安装路径,All Users为默认路径安装会将Miniconda安装在C盘的Program Files(x86)文件夹下。读者可根据自己的需求进行安装路径的选择,本书选择Just Me进行下一步安装,如图1-9所示。单击Next按钮后点击Browse对安装路径进行选择,本书将路径设置为D盘下的Miniconda文件夹,如图1-10所示:
(4)、路径修改完成后单击Next即可进行下一步,勾选Add Miniconda3 to my PATH environment variable选项添加系统环境变量,否则需要手动添加系统环境变量,勾选Register Miniconda3 as my default Python3.9选项将Miniconda3注册为默认,这样任何编辑器都可以添加使用Miniconda的Python环境,勾选后单击Install进行安装,如图1-11:
(5)、安装完成后单击Next,再单击Finish即可完成安装,复选框的两个选项均可以不勾选。如图1-12:
(6)安装完成后就可以在开始菜单中找到Miniconda,如图1-13:
(7)、点击Anaconda Prompt(Miniconda3)进入命令窗口,输入conda list命令,就可以看到Miniconda环境中安装的包,如图1-14:
Miniconda环境安装完成,可以开始使用,初学者建议使用Miniconda环境对需要安装的包进行管理,节省了很多配置环境过程中不必要的麻烦,节约时间,可以把主要的时间和精力放在后面的学习内容上。
PyCharm是由JetBrains打造的一款Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,PyCharm拥有一般IDE具备的功能,比如,调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,PyCharm还提供了一些高级功能,以用于支持Django框架下的专业Web开发。同时还支持Google App Engine,支持IronPython。这些功能在先进代码分析程序的支持下,使 PyCharm 成为 Python 专业开发人员和刚起步人员使用的有力工具。
PyCharm下载的官方网址:www.jetbrains.com/pycharm/。打开浏览器在地址栏中输入该网址,页面跳转到官方下载网址,如图1-15所示:
点击DOWNLOAD跳转到下载页面,PyCharm提供了三种操作系统(Windows、 macOS、 Linux)的下载安装包,此外还分了Professional版和Community版,Professional为专业版本,需要购买激活码才能够正常使用,其中包含了很多高级工具的使用;Community为社区版本,是一个免费的版本,作为初学者或者初级开发者使用社区版就完全能够满足需求,本书使用Community社区版,如图1-16所示:
下载完毕后双击安装包即可进行安装,安装过程简单易学,操作步骤如下:
(1)、双击安装包,进入安装流程,直接点击Next进行下一步,如图1-17所示:
(2)、点击Browse按钮,选择安装路径,如果选择默认路径PyCharm会被安装在C盘,此处可根据个人偏好设置安装路径,然后单击Next按钮进行下一步安装流程,如图1-18所示:
(3)、进入安装选项勾选界面,Create Desktop Shortcut选项为创建桌面图标;Updata Context Menu选项为单击鼠标右键出现的快捷窗口中添加快速打开PyCharm的快捷键,不建议勾选此项;Update PATH Variable选项为添加系统环境变量(需要重启);Create Associations选项为与.py文件创建连接。建议如图1-19进行勾选,勾选完成后单击Next按钮即可进入下一步流程。
(4)、按照默认直接点击Install按钮进行安装,如图1-20、图1-21所示:
(5)、安装需要等待,安装完成后可以选择立即重新启动计算机和稍后启动两个选项,可以根据自身需求进行选择,如需要立即重启计算机需要将其他正在进行的文件进行保存关闭,以免造成不必要的麻烦。如图1-22所示:
PyCharm下载完成后双击图标即可启动软件,可以为PyCharm配置虚拟环境的解释器,也可以配置已经在计算机中安装好的Miniconda环境。建议为PyCharm配置Miniconda环境中的Python作为解释器,这样容易管理各种第三方库,如果需要使用其他编辑器时也可以同时共享使用Miniconda环境,实现多个编辑器共用一个解释器。没有必要在计算机中安装过的多Python解释器,不仅浪费计算机的存储空间,在使用的时候也很容易混淆解释器。配置流程步骤如下:
(1)、选择File菜单后弹出菜单栏,选择Settings单击,进入设置界面如图1-23,图1-35所示:
(2)、单击右上角齿轮图标,弹出菜单,菜单选项中有ADD和SHOW ALL两个选项,单击ADD选项进入设置页面,如图1-25所示:
(3)、选择Conda Environment添加conda环境,勾选Existing environment,点击添加按钮根据conda环境的安装路径添加Python解释器,如图1-26所示:
(4)、选择Miniconda安装路径,在文件夹中找到Python.exe文件,选中该文件,点击OK键返回上级界面,如图1-27所示:
(5)、返回上一级界面后,勾选Make available to all projects选项,这样其他所有的项目都可以共用这个解释器,如图1-28所示:
(6)、PyCharm的解释器就成功配置为Miniconda环境中的Python,点击OK按钮完成配置,就可以顺利使用,如图1-29所示:
1.Python爬虫相关库介绍和配置
Python有很多与爬虫相关的库,按照爬虫功能可以将这些库划分为以下三种,如表所示:
类型 | 库名 | 简介 |
---|---|---|
通用 | urllib | Python内置的HTTP请求库,提供一系列用于操作URL的功能。 |
通用 | Requests | 基于urllib,采用Apache2 Licensed开源协议的HTTP库。 |
通用 | urllib3 | 提供很多Python标准库里所没有的重要特征:线程安全,连接池,客户端SSL/TLS验证,文件分布编码上传,协助处理重复请求和HTTP重定位,支持压缩编码等。 |
HTML/XML解析器 | lxml | C语言编写的高效HTML/XML处理库,支持XPath。 |
HTML/XML解析器 | bs4 | Python实现的HTML/XML处理库,支持多种解释器,效率相对较低。 |
连接数据库 | PyMySQL | 使用Python连接MySQL服务器的一个库。 |
连接数据库 | PyMongo | 使用Python连接MongDB数据库的一个库。 |
框架 | Scrapy | 爬取网站数据,提取结构性数据而编写的应用框架。可应用在数据挖掘,信息处理或历史数据存储等一系列的程序中。 |
无论是使用Anaconda环境还是独立安装Python都可以直接使用pip工具进行包的安装。pip 是一个现代的,通用的Python包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。pip工具支持直接在命令上运行。另外,pip工具支持指定版本库的安装,具体操作可以参考pip的官方文档,官方文档网址:https://pip.pypa.io/en/stable/。本书使用Anaconda环境,Anaconda中自带了pip工具,可以直接使用命令pip install packagename进行在线安装,示例如下:
pip install requests
pip install bs4
pip install Scrapy
pip install pymysql
pip install pymongo
安装完成以后可以使用命令conda list查看已经安装完成的库。
2.配置MySQL数据库
MySQL 是最流行的关系型数据库管理系统,由瑞典MySQL AB公司开发,现在归属于Oracle公司。由于MySQL数据库具备体积小、速度快、成本低、开源、免费等特点,中小型网站的开发大多数选择使用MySQL用于网站数据支持。在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
本书使用的MySQL版本为社区版mysql-installer-community-5.7.36.1,是一个免费版本,可根据需求选择更新或者更旧的版本。在64位的Windows操作系统上下载安装该版本。官方下载网址:https://downloads.mysql.com/archives/installer/。如图1-30所示:
下载完成后双击安装包进入安装流程,具体流程如下:
(1).双击打开安装包,勾选"Custom"选项,如图1-31所示。单击"Next"按钮后进入安装选择界面。
(2).单击"Edit"按钮,在弹出框中选择"64-bit"选项,单击"Filter"按钮,如图1-32所示:
(3).在下图左侧栏内选择需要安装的程序,选中后单击右向箭头,将需要安装的程序添加到右侧栏中,选择完成后单击"Next"按钮,如图1-33所示:
(4).进入安装界面,单击"Execute"按钮开始安装,如图1-34所示:
(5).安装完成后还需要配置服务,单击"Next"进入配置页面,如图1-35所示:
(6).对于一般用户来说,在"Config Type"栏中选择"Development Computer"即可,MySQL的默认端口号为3306,此页面选择默认即可,直接单击"Next"进入下一步安装,如图1-36所示:
(7).账户和角色设置页面,设置Root用户密码后直接单击"Next"按钮进行下一步,如图1-37所示:
(8).默认勾选"Configure MySQL Server as a Windows Service",单击"Next"按钮进行下一步,如图1-38所示:
(9).进入设置应用服务配置步骤,单击"Execute"按钮开始执行,如图1-39所示:
(10).执行成功的应用服务配置将变为绿色的勾选状态,单击"Finish"按钮完成配置过程,如图1-40所示:
(11).安装完成后,如图1-41所示:
(12).安装完成后会自动启动MySQL Workbench,如图1-42所示:
完成MySQL安装后还需要配置MySQL的环境变量,操作步骤如下:
(1).打开系统属性窗口。右键单击"我的电脑",选择菜单中的"属性",在弹出的窗口中选择"高级系统设置",弹出系统属性窗口,如图1-43所示:
(2).打开环境变量窗口。单击系统属性窗口中的"环境变量",进入环境变量窗口,如图1-44所示:
(3).设置MySQL的环境变量。在系统变量中找到"Path"双击选项进入设置窗口,如图1-45所示:
(4).单击"新建"按钮,进入编辑模式,将MySQL的安装目录下的bin目录的路径:"C:\Program Files\MySQL\MySQL Server 5.7\bin"输入到编辑栏中,单击"确定"按钮后即可完成配置,如图1-46所示:
配置环境变量后,可使用管理员权限运行命令提示符,使用"net start mysql57"命令启动MySQL服务,使用"net stop mysql57"命令可关闭MySQL服务,也可以进入"我的电脑",在窗口顶部单击"管理"按钮,如图1-47所示:
单击"管理"按钮后弹出计算机管理窗口,在窗口中单击"服务和应用程序",如图1-48所示:
单击"服务"选项,如图1-49所示:
在服务窗口中选中"MySQL57",在此处可以停止服务,暂停服务,重启动此服务,如图1-50所示:
MySQL57状态为"正在运行"为正常状态,MySQL安装完成。
3.配置MongoDB数据库
MongoDB的官网提供了多种版本可供下载安装,本书使用Windows系统5.0版本:mongodb-windows-x86_64-5.0.6-signed.msi。官方下载地址:https://www.mongodb.com/try/download/community。MongoDB为非关系型数据库,安装过程简单,具体安装及配置过程如下:
(1).双击打开msi安装包,进入安装模式,单击"Next"按钮,如图1-51所示:
(2).勾选复选框,同意接受协议,单击"Next"按钮进入下一步,如图1-52所示:
(3).安装模式有两种:Complete(完全模式)和Custom(通用模式)。完全模式将会全部安装在默认C盘且无法更改,如果需要更改安装路径需要选择通用模式,如图1-53所示:
(4).单击"Custom"按钮进入通用模式,在通用模式下可以选择安装路径和需要安装的组件,单击"Browse"按钮可以选择安装路径,单击"Next"按钮进入下一步,如图1-54所示:
(5).如果需要修改数据存储的路径可以修改"Data Directory"中的路径,如果需要修改日志 保存路径可以修改"Log Directory"中的路径,此处按照默认来安装,单击"Next"按钮进入下一步,如图1-55所示:
(6).Mongodb Compass 提供图形化管理界面管理MongoDB数据库,根据自身需求可选择勾选复选框,也可单独下载Mongodb Compass进行安装,单击"Next"按钮进入下一步,如图1-56所示:
(7).下载安装完Mongodb Compass组件后跳转到MongoDB安装界面,单击"Install"按钮进行安装,如图1-57所示:
(8).在系统变量"Path"中添加MongoDB的路径:“C:\Program Files\MongoDB\Server\5.0\bin”,如图1-58所示:
(9).安装完成后可以在计算机管理窗口中对MongoDB数据库的服务进行关闭,重启动,暂停。在命令提示符中输入"mongo"命令即可进入数据库进行使用,如图1-59所示:
(10).可以在官网下载安装MongoDB Compass工具包对数据库进行图形界面的管理,官方下载网址:https://www.mongodb.com/download-center/compass,如图1-60所示:
下载完毕后直接将压缩包解压,双击MongoDBCompass.exe图标即可打开MongoDB Compass界面,如图1-61所示:
单击"Connect"即可连接当前安装好的MongoDB数据库,如图1-62所示: