新書推薦:

《
中国绘画:元至清(巫鸿“中国绘画”系列收官之作,重新理解中国绘画史)
》
售價:HK$
184.8

《
这里,群星闪耀:乒坛典藏·绽放巴黎(全套7册)
》
售價:HK$
259.6

《
想通了:清醒的人先享受自由
》
售價:HK$
60.5

《
功能训练处方:肌骨损伤与疼痛的全周期管理
》
售價:HK$
140.8

《
软体机器人技术
》
售價:HK$
97.9

《
叙事话语·新叙事话语
》
售價:HK$
74.8

《
奴隶船:海上奴隶贸易400年
》
售價:HK$
75.9

《
纸上博物馆·美索不达米亚:文明的诞生(破译古老文明的密码,法国伽利玛原版引进,150+资料图片)
》
售價:HK$
85.8
|
編輯推薦: |
《中公版·Python高效开发指南:Python网络爬虫综合开发》体系科学,条理清晰,语言通俗易懂,讲解深入浅出,实战性强。本书立足于Python网络爬虫开发所需的基础知识,结合实际编程中所遇到的一些问题进行重点讲解,适用于Python网络爬虫开发初学者。另外,本书也适合作为通过Python网络爬虫开发进入Web全栈开发、数据分析和人工智能领域的入门教材。
本书采用双色印刷模式,图文并茂,并提供视频讲解等增值服务。在本书的重要章节提供专业讲师的讲解视频,扫描二维码即可实现在线学习,操作便捷高效,使读者在掌握Python网络爬虫开发相关知识的基础下,进一步加强实际操作的动手能力。
|
內容簡介: |
《中公版·Python高效开发指南:Python网络爬虫综合开发》共分为十二章,涵盖了Python网络爬虫综合开发的相关知识,对重难点内容进行了针对性讲解。本书面向Python网络爬虫开发的初学者,按照由浅入深、循序渐进的规律,从讲解网络爬虫开发基础知识,到讲解如何开发单个.py文件的Python爬虫程序,后讲解基于Scrapy爬虫框架的网络爬虫开发。
● 网络爬虫概述(章)
介绍了网络爬虫的基础知识,包括定义、分类、原理和搜索策略等概念性内容。
● Python网络爬虫开发基础(第二章)
介绍了Python开发环境的搭建,重点介绍了PyCharm的使用。另外,还详细介绍了HTTP协议的相关知识,并介绍了HTML、JavaScript和XPath。
● 开发单个.py文件的爬虫程序(第三章、第四章)
介绍了如何开发单个.py文件的Python爬虫程序,该程序采用Request模块获取数据,并采用XPath、BeautifulSoup4和PyQuery模块进行解析。
● 开发Python网络爬虫相关技术(第五章至第十章)
介绍了Python网络爬虫开发中广泛应用的技术,包括正则表达式、数据接口、数据库的使用、表单的使用、模拟登录、反反爬虫方法和Selenium模拟浏览器等,并结合丰富的小案例来展示知识点。
● Scrapy爬虫框架(第十一章、第十二章)
介绍了基于Scrapy爬虫框架的爬虫开发和分布式爬虫框架scrapy-redis,以及爬虫的部署。
|
內容試閱:
|
章
网络爬虫概述
1.1网络爬虫的定义
网络爬虫是一种按照一定的规则,自动地爬取万维网信息的程序或者脚本。网络爬虫又称网络蜘蛛(Web Spider),这是一个很形象的名字,如果将互联网看作一个蜘蛛网,那么爬虫就是在蜘蛛网上爬来爬去的蜘蛛。
1.2网络爬虫的发展阶段
到目前为止,网络爬虫大致可分为以下四个发展阶段。
阶段:早期爬虫。在这一阶段,互联网基本是完全开放的,人类流量是主流,爬虫只是爬取简单的字段信息。
第二阶段:分布式爬虫。随着互联网数据量的不断增大,爬虫需要设计成分布式架构,才能实现高效爬取。
第三阶段:暗网爬虫。在这一阶段,互联网出现了很多新的业务,这些业务的数据之间链接很少,因此针对暗网的爬虫被设计出来。
第四阶段:智能爬虫。在这一阶段,爬虫主要用于社交网络数据的爬取,需要应对各种各样的反爬虫技术。
1.3网络爬虫的应用
目前,网络爬虫的主要应用如图1-1所示,其中主要的应用有搜索引擎、数据分析、信息聚合、金融投资分析等。
在这些应用中,如果没有网络爬虫爬取数据,那么再好的算法和模型也难以得到结果,并且没有数据进行机器学习建模,也无法形成能解决实际问题的模型。因此,在目前炙手可热的人工智能领域,网络爬虫越来越起到数据生产者的关键作用。
图1-1网络爬虫的主要应用
1.4网络爬虫的类型
网络爬虫主要分为以下三种类型。
(1)通用爬虫
通用爬虫又称全网爬虫,目前是大型捜索引擎(如百度、搜狗、谷歌等)中内容爬取系统的重要组成部分。通用爬虫的主要目的是将互联网上的网页爬取到本地,形成一个互联网内容的副本,然后再处理形成标签索引,用户搜索时,就会返回搜索关键字与标签相关的网页。通用爬虫的爬取策略为深度优先搜索策略和广度优先搜索策略。
(2)聚焦爬虫
聚焦爬虫又称主题网络爬虫,是指选择性地爬取那些与预先定义好的主题相关网页的网络爬虫。
(3)增量爬虫
增量爬虫又称增量式网络爬虫,是指对已下载网页采取增量式更新,只爬取新产生的或者已经发生变化的网页的网络爬虫。增量爬虫能够在一定程度上保证爬取的网页尽可能是新的网页。
上述三种网络爬虫的功能不同,使用方法也不同。例如,百度、谷歌搜索引擎是典型的增量爬虫,提供大而全的内容来满足世界各地用户的需求。随着爬虫使用越来越灵活,很多网站逐渐使用多个爬虫进行同步爬取。例如,很多视频网站都是先通过一般爬虫或者人工批量爬取内容,再提供给用户一些可选项,让用户自己给聚焦爬虫划定范围,后找到匹配度足够高的内容,整个过程极大地降低了资源和时间的消耗。
1.5网络爬虫的原理
网络爬虫是模拟用户在浏览器或者某个应用程序上的操作,并实现操作过程自动化的程序。
简而言之,网络爬虫实质上是实现浏览器的功能,通过指定统一资源定位符(URL),直接返回给用户所需要的数据,而不需要人工去一步步操纵浏览器获取数据。
网络爬虫的基本工作流程如下:
①选取一个初始URL,通常为网站首页的URL。
②将初始URL放入待爬取URL队列中。
③从待爬取URL队列中取出一个待爬取的URL,将该URL对应的网页下载下来,并存储到已下载网页库中。将这个URL放入已爬取URL集合中。
④分析已爬取URL集合中某一URL(假设该URL为A)对应的网页,获取其中的一个或全部其他URL(获取方式基于不同的搜索策略而定),设为数学意义上的集合B。循环判断B中每个URL是否属于已爬取URL集合或已检测URL集合。如果不属于,那么将B中该URL放入待爬取URL队列中;如果属于,那么判断B中下一个URL。上述循环结束后,判断A对应的网页中所有的URL是否都存在于已爬取URL集合中,若是,则将A从已爬取URL集合中删除,放入已检测URL集合中。
⑤判断待爬取URL队列是否为空,若不为空,则转入流程③;若为空,则结束爬取。
需要注意的是,网络上的网页不是一直不变的,因此已检测URL集合中的网页在一段时间后有可能会发生变化。针对这个问题,需要每隔一段时间,将已检测URL集合中的所有URL恢复到已爬取URL集合中。
1.6网络爬虫的搜索策略
搜索引擎的网络爬虫工作方式是爬取整个网站,通常从网站首页开始爬取,然后从首页中获取本站其他网页的URL,根据这些URL爬取对应网页的内容。在爬取到的其他网页中再次获取没爬取过的网页的URL,然后通过这些URL爬取下一批网页。采用上述方式一直爬取下去,直到爬取完该网站的所有网页为止。
如上所述,可将网络爬虫看作一个自动爬取网页的程序,它为搜索引擎从互联网上爬取网页信息,是搜索引擎的重要组成部分。
在爬取网页时,网络爬虫一般有两种搜索策略,分别是深度优先搜索策略和广度优先搜索策略。
1.6.1深度优先搜索策略
采用深度优先搜索策略爬取网页的过程:选取一个初始网页的URL作为当前URL,爬取当前URL对应的网页,并获取其中的其他URL,从中选择任意一个未爬取的URL作为当前URL,继续向下爬取。若当前URL对应的网页中没有未爬取的URL,则回溯,将前一个爬取网页的URL作为当前URL,继续向下爬取,直到所有URL对应的网页都被爬取为止。
例如,采用深度优先搜索策略爬取如图1-2所示的网站。
图1-2采用深度优先搜索策略爬取的网站
在图1-2中,每一个圆圈代表一个网页,分别用字母A~I命名,各个网页的优先级相同,网页之间采用箭头连接,箭头指向的一端是目标网页,另一端是源网页,箭头连接表明源网页中包含目标网页的URL。
选取A作为初始网页,将A的URL作为当前URL,爬取A,从A中获取了B、C、D、E、F的URL。选择B的URL作为当前URL,爬取B,爬完后,由于B中没有获取URL,因此回溯到上一个A,搜索A中未爬取的URL,选择C的URL作为当前URL,爬取C。与B同理,接着爬取D和E。爬完E后,从E中获取了H的URL,于是爬取H。爬完H后,从H中获取了I的URL,于是爬取I,爬完后,由于I中没有获取URL,因此不断回溯直到A,搜索A中未爬取的URL,此时只剩F的URL未爬取,将F的URL作为当前URL,爬取F,从F中获取了G的URL,于是爬取G,爬完后,由于G中没有获取URL,因此不断回溯直到A,此时A中没有未爬取的URL,整个爬取过程结束。
1.6.2广度优先搜索策略
采用广度优先搜索策略爬取网页的过程:选取一个初始网页的URL作为当前URL,爬取当前URL对应的网页,并获取其中的所有未爬取URL,放入待爬取URL队列,依次爬取上述所有未爬取的URL,每次爬取都将当前URL置为正在爬取的URL。若当前URL对应的网页中没有未爬取的URL,则将待爬取队列中的队头URL作为当前URL,继续向下爬取,直到所有URL对应的网页都被爬取为止。广度优先搜索策略是爬虫常用的方式,因为这种方式可以让网络爬虫并行处理,提高爬取速度。
例如,采用广度优先搜索策略爬取如图1-3所示的网站。
图1-3采用广度优先搜索策略爬取的网站
在图1-3中,每一个圆圈代表一个网页,分别用字母A~I命名,各个网页的优先级相同,网页之间采用箭头连接,箭头指向的一端是目标网页,另一端是源网页,箭头连接表明源网页中包含目标网页的URL。
选取A作为初始网页,将A的URL作为当前URL,爬取A,从A中获取了B、C、D的URL,于是分别爬取B、C、D,每次爬取都分别将B、C、D中的未爬取URL放入待爬取URL队列中,全部爬取完后,A中已没有未爬取的URL。待爬取URL队列中的个元素为E,把E的URL作为当前URL,爬取E。E中已没有未爬取的URL,接着爬取待爬取队列中的F,然后依次爬取G、H、I,整个爬取过程结束。
这个爬取顺序验证了爬虫是逐层进行爬取的,只有在完成上一层的爬取之后,才会爬取下一层,这就是广度优先策略爬取的过程。
1.7反爬虫技术及解决方案
1.7.1通过User-Agent来反爬虫
无论是浏览器,还是爬虫程序,在向服务器发起网络请求时,都会发过去一个头文件。某网页的Request Headers如图1-4所示。
图1-4某网页的Request Headers
在Request Headers中,大多数字段都是浏览器向服务器“表明身份”用的。对于爬虫程序而言,需要注意的字段是User-Agent。很多网站都会建立User-Agent白名单,只有属于白名单的User-Agent才能够正常访问。例如,爬虫爬取某些网站,如果采用Requests模块的get()方法发送GET请求时没有添加User-Agent参数,那么会返回错误信息。
应对这种反爬虫技术,可以通过在Requests模块的get()方法中设置User-Agent参数,或使用User-Agent池来解决。
1.7.2通过IP限制来反爬虫
网络爬虫一般对服务器是有害的,因此服务器管理员会设置一些保护程序,该程序一旦发现某个IP在短时间内频繁访问同一个网页,就会封禁这个IP,爬虫程序再请求就会直接跳转到异常提示页面,从而无法爬取正常网页的数据。
应对这种反爬虫技术,可以通过代理IP池来解决。通过代理IP,从不同的IP进行访问,这样就不会被封禁IP了。可是代理IP的获取是一件很麻烦的事情,网上有免费的和付费的,质量参差不齐。如果企业需要,那么可以通过购买云服务来自建代理IP池。
另外一种应对IP限制的解决方案是降低爬虫的采集速率,使HTTP请求速率略低于阈值,不触动网站的封禁IP程序。这种解决方案是以牺牲爬虫的工作效率为代价的。
1.7.3通过JavaScript脚本来反爬虫
网络爬虫毕竟只是人为编写的一段程序,它并不能像人类一样去应对各种变化,如验证码、滑动解锁等。例如,要爬取某个网站,在进入网站之前,会有一个验证页面来验证操作者是否为机器。对于这种验证方法,可以通过JavaScript代码生成一串随机数字,然后要求浏览器通过JavaScript的运算求出这一串数字的和,后返回给服务器。然而这样一个简单且基础的验证步骤却是爬虫程序无法完成的。
应对这种反爬虫技术,一般要使用Selenium的WebDriver(如PhantomJS)来解决。PhantomJS在Windows中是一个.exe文件,它可以在没有图形界面的情况下完全模拟一个浏览器,因此可以轻松应对JavaScript脚本反爬虫技术。
1.7.4通过robots.txt来反爬虫
robots.txt是一种存放于网站根目录下的ASCII编码的文本文件,通常用于告知网络搜索引擎的网络爬虫,此网站中的哪些内容是不可以被网络
|
|