编辑推荐
畅销的Python网络爬虫开发实战图书全新升级版,上一版年销量近40000册。针对Python 3.6版本编写。提供示例完整源码和实例网站搭建源码,确保用户能在本地成功复现爬取网站环境,并保障网站的稳定性与可靠性以及代码运行结果的可再现性。Internet上包含了许多有用的数据,其中大部分是可以免费公开访问的。但是,这些数据不容易使用,它们内嵌在网站的架构和样式中,在提取时也需要多加小心。网络爬取技术作为一种收集和理解网络上海量信息的方式,正变得越来越有用。本书是使用Python 3.6的新特性来爬取网络数据的入门指南。本书讲解了从静态网站提取数据的方法,以及如何使用数据库和文件缓存技术来节省时间并管理服务器负载,然后介绍了如何使用浏览器、爬虫和并发爬虫开发一个更为复杂的爬虫。借助于PyQt和Selenium,你可以决定何时以及如何从依赖JavaScript的网站上爬取数据,以及更好地理解在受CAPTCHA保护的复杂网站上提交表单的方法。本书还讲解了使用Python包(比如mechanize)进行自动化处理的方法、使用Scrapy库创建基于类的爬虫的方法,以及如何在真实的网站上实施所学的爬虫技巧。本书*后还涵盖了使用爬虫对网站进行测试、远程爬取技术、图像处理以及其他相关的主题。本书主要内容如下:使用简单的Python程序从页面中提取数据;构建并发爬虫,对页面进行并行处理;通过跟踪链接来爬取一个网站;从HTML中提取特性;缓存下载的HTML,以供复用;比较并发模型,确定比较快的爬虫;解析依赖于JavaScript的网站;与表单和会话进行交互。
内容简介
《用Python写网络爬虫(第 2版》讲解了如何使用Python来编写网络爬虫程序,内容包括网络爬虫简介,从页面中抓取数据的3种方法,提取缓存中的数据,使用多个线程和进程进行并发抓取,抓取动态页面中的内容,与表单进行交互,处理页面中的验证码问题,以及使用Scarpy和Portia进行数据抓取,并在很后介绍了使用本书讲解的数据抓取技术对几个真实的网站进行抓取的实例,旨在帮助读者活学活用书中介绍的技术。《用Python写网络爬虫(第 2版》适合有一定Python编程经验而且对爬虫技术感兴趣的读者阅读。
作者简介
凯瑟琳·雅姆尔,是德国柏林的一位数据科学家和Python支持者。她经营了一家数据科学咨询公司——Kjamistan,为不同规模的企业提供诸如数据抽取、采集以及建模的服务。她从2008年开始使用Python进行编程,从2010年开始使用Python抓取网站,并且在使用网络爬虫进行数据分析和机器学习的不同规模的初创企业中工作过。读者可以通过Twitter关注她的想法以及动态。
理查德·劳森,来自澳大利亚,毕业于墨尔本大学计算机科学专业。毕业后,他创办了一家专注于网络爬虫的公司,为超过50个国家的业务提供远程工作。他精通世界语,可以使用汉语和韩语对话,并且积极投身于开源软件事业。他目前正在牛津大学攻读研究生学位,并利用业余时间研发自主无人机。
,毕业于北京科技大学计算机科学与技术专业,获得硕士学位。曾任职于*,当前供职于凡普金科,负责应用安全工作。热爱Python编程和Web安全,希望以更加智能和自动化的方式提升网络安全。
目录
- 第1章网络爬虫简介1
- 1.1网络爬虫何时有用1
- 1.2网络爬虫是否合法2
- 1.3Python33
- 1.4背景调研4
- 1.4.1检查robots.txt4
- 1.4.2检查网站地图5
- 1.4.3估算网站大小6
- 1.4.4识别网站所用技术7
- 1.4.5寻找网站所有者9
- 1.5编写第一个网络爬虫11
- 1.5.1抓取与爬取的对比11
- 1.5.2下载网页12
- 1.5.3网站地图爬虫15
- 1.5.4ID遍历爬虫17
- 1.5.5链接爬虫19
- 1.5.6使用requests库28
- 1.6本章小结30
- 第2章数据抓取31
- 2.1分析网页32
- 2.23种网页抓取方法34
- 2.2.1正则表达式35
- 2.2.2BeautifulSoup37
- 2.2.3Lxml39
- 2.3CSS选择器和浏览器控制台41
- 2.4XPath选择器43
- 2.5LXML和家族树46
- 2.6性能对比47
- 2.7抓取结果49
- 2.7.1抓取总结50
- 2.7.2为链接爬虫添加抓取回调51
- 2.8本章小结55
- 第3章下载缓存56
- 3.1何时使用缓存57
- 3.2为链接爬虫添加缓存支持57
- 3.3磁盘缓存60
- 3.3.1实现磁盘缓存62
- 3.3.2缓存测试64
- 3.3.3节省磁盘空间65
- 3.3.4清理过期数据66
- 3.3.5磁盘缓存缺点68
- 3.4键值对存储缓存69
- 3.4.1键值对存储是什么69
- 3.4.2安装Redis70
- 3.4.3Redis概述71
- 3.4.4Redis缓存实现72
- 3.4.5压缩74
- 3.4.6测试缓存75
- 3.4.7探索requests-cache76
- 3.5本章小结78
- 第4章并发下载79
- 4.1100万个网页79
- 4.2串行爬虫82
- 4.3多线程爬虫83
- 4.4线程和进程如何工作83
- 4.4.1实现多线程爬虫84
- 4.4.2多进程爬虫87
- 4.5性能91
- 4.6本章小结94
- 第5章动态内容95
- 5.1动态网页示例95
- 5.2对动态网页进行逆向工程98
- 5.3渲染动态网页104
- 5.3.1PyQt还是PySide105
- 5.3.2执行JavaScript106
- 5.3.3使用WebKit与网站交互108
- 5.4渲染类111
- 5.5本章小结117
- 第6章表单交互119
- 6.1登录表单120
- 6.2支持内容更新的登录脚本扩展128
- 6.3使用Selenium实现自动化表单处理132
- 6.4本章小结135
- 第7章验证码处理136
- 7.1注册账号137
- 7.2光学字符识别140
- 7.3处理复杂验证码144
- 7.4使用验证码处理服务144
- 7.4.19kw入门145
- 7.4.2报告错误150
- 7.4.3与注册功能集成151
- 7.5验证码与机器学习153
- 7.6本章小结153
- 第8章Scrapy154
- 8.1安装Scrapy154
- 8.2启动项目155
- 8.2.1定义模型156
- 8.2.2创建爬虫157
- 8.3不同的爬虫类型162
- 8.4使用shell命令抓取163
- 8.4.1检查结果165
- 8.4.2中断与恢复爬虫167
- 8.5使用Portia编写可视化爬虫170
- 8.5.1安装170
- 8.5.2标注172
- 8.5.3运行爬虫176
- 8.5.4检查结果176
- 8.6使用Scrapely实现自动化抓取177
- 8.7本章小结178
- 第9章综合应用179
- 9.1Google搜索引擎179
- 9.2Facebook184
- 9.2.1网站184
- 9.2.2FacebookAPI186
- 9.3Gap188
- 9.4宝马192
- 9.5本章小结196