编辑推荐

适读人群:有一定Python语言基础,想学习编写复杂网络爬虫的读者使用

  《精通Scrapy网络爬虫》以应用为出发点,详细深入地介绍了Python流行框架Scrapy的核心技术及网络爬虫的开发技巧。
  《精通Scrapy网络爬虫》分为基础篇和高级篇两部分,基础篇重点介绍Scrapy的核心元素,如spider、selector、item、link等;高级篇讲解如登录认证、文件下载、执行JavaScript、动态网页爬取、使用HTTP代理、分布式爬虫的编写等内容。
  为方便读者快速上手,《精通Scrapy网络爬虫》还设计了大量项目案列,包括供练习用的网站的爬取以及如京东、知乎、豆瓣、360等网站的爬取。
  《精通Scrapy网络爬虫》很适合有一定Python语言基础,想学习编写复杂网络爬虫的读者使用。此外,书中涉及的关联知识很丰富,可以帮助读者拓展知识面,掌握更多实用技能。

内容简介

  《精通Scrapy网络爬虫》深入系统地介绍了Python流行框架Scrapy的相关技术及使用技巧。《精通Scrapy网络爬虫》共14章,从逻辑上可分为基础篇和高级篇两部分,基础篇重点介绍Scrapy的核心元素,如spider、selector、item、link等;高级篇讲解爬虫的高级话题,如登录认证、文件下载、执行JavaScript、动态网页爬取、使用HTTP代理、分布式爬虫的编写等,并配合项目案例讲解,包括供练习使用的网站,以及京东、知乎、豆瓣、360爬虫案例等。
  《精通Scrapy网络爬虫》案例丰富,注重实践,代码注释详尽,适合有一定Python语言基础,想学习编写复杂网络爬虫的读者使用。


作者简介

  刘硕:硕士,曾就职于知名外企,从事一线开发工作10年,目前主要从事Python开发与教学工作,在慕课网开设有多门Python课程,深受学员欢迎。

目录

第1章初识Scrapy1
1.1网络爬虫是什么1
1.2Scrapy简介及安装2
1.3编写第一个Scrapy爬虫3
1.3.1项目需求4
1.3.2创建项目4
1.3.3分析页面5
1.3.4实现Spider6
1.3.5运行爬虫8
1.4本章小结11
第2章编写Spider12
2.1Scrapy框架结构及工作原理12
2.2Request和Response对象14
2.2.1Request对象15
2.2.2Response对象16
2.3Spider开发流程18
2.3.1继承scrapy.Spider19
2.3.2为Spider命名20
2.3.3设定起始爬取点20
2.3.4实现页面解析函数22
2.4本章小结22
第3章使用Selector提取数据23
3.1Selector对象23
3.1.1创建对象24
3.1.2选中数据25
3.1.3提取数据26
3.2Response内置Selector28
3.3XPath29
3.3.1基础语法30
3.3.2常用函数35
3.4CSS选择器36
3.5本章小结40
第4章使用Item封装数据41
4.1Item和Field42
4.2拓展Item子类44
4.3Field元数据44
4.4本章小结47
第5章使用ItemPipeline处理数据48
5.1ItemPipeline48
5.1.1实现ItemPipeline49
5.1.2启用ItemPipeline50
5.2更多例子51
5.2.1过滤重复数据51
5.2.2将数据存入
MongoDB54
5.3本章小结57
第6章使用LinkExtractor提取链接58
6.1使用LinkExtractor59
6.2描述提取规则60
6.3本章小结65
第7章使用Exporter导出数据66
7.1指定如何导出数据67
7.1.1命令行参数67
7.1.2配置文件69
7.2添加导出数据格式70
7.2.1源码参考70
7.2.2实现Exporter72
7.3本章小结74
第8章项目练习75
8.1项目需求77
8.2页面分析77
8.3编码实现83
8.4本章小结88
第9章下载文件和图片89
9.1FilesPipeline和
ImagesPipeline89
9.1.1FilesPipeline使用
说明90
9.1.2ImagesPipeline使用
说明91
9.2项目实战:爬取matplotlib
例子源码文件92
9.2.1项目需求92
9.2.2页面分析94
9.2.3编码实现96
9.3项目实战:下载360图片103
9.3.1项目需求104
9.3.2页面分析104
9.3.3编码实现107
9.4本章小结109
第10章模拟登录110
10.1登录实质110
10.2Scrapy模拟登录114
10.2.1使用FormRequest114
10.2.2实现登录Spider117
10.3识别验证码119
10.3.1OCR识别119
10.3.2网络平台识别123
10.3.3人工识别127
10.4Cookie登录128
10.4.1获取浏览器
Cookie128
10.4.2CookiesMiddleware
源码分析129
10.4.3实现BrowserCookies-
Middleware132
10.4.4爬取知乎个人
信息133
10.5本章小结135
第11章爬取动态页面136
11.1Splash渲染引擎140
11.1.1render.html端点141
11.1.2execute端点142
11.2在Scrapy中使用Splash145
11.3项目实战:爬取toscrape
中的名人名言146
11.3.1项目需求146
11.3.2页面分析146
11.3.3编码实现147
11.4项目实战:爬取京东商城
中的书籍信息149
11.4.1项目需求149
11.4.2页面分析149
11.4.3编码实现152
11.5本章小结154
第12章存入数据库155
12.1SQLite156
12.2MySQL159
12.3MongoDB165
12.4Redis169
12.5本章小结173
第13章使用HTTP代理174
13.1HttpProxyMiddleware175
13.1.1使用简介175
13.1.2源码分析177
13.2使用多个代理179
13.3获取免费代理180
13.4实现随机代理184
13.5项目实战:爬取豆瓣电影
信息187
13.5.1项目需求188
13.5.2页面分析189
13.5.3编码实现194
13.6本章小结198
第14章分布式爬取199
14.1Redis的使用200
14.1.1安装Redis200
14.1.2Redis基本命令201
14.2scrapy-redis源码分析206
14.2.1分配爬取任务
部分207
14.2.2汇总爬取数据
部分214
14.3使用scrapy-redis进行分
布式爬取217
14.3.1搭建环境217
14.3.2项目实战218
14.4本章小结224


精彩书摘

  第1章初识Scrapy
  本章首先介绍爬虫的基本概念、工作流程,然后介绍Scrapy的安装和网络爬虫项目的实现流程,使读者对网络爬虫有一个大致的了解,并且建立起网络爬虫的编写思路。本章重点讲解以下内容:
  ?网络爬虫及爬虫的工作流程。
  ?Scrapy的介绍与安装。
  ?网络爬虫编写步骤。
  1.1网络爬虫是什么
  网络爬虫是指在互联网上自动爬取网站内容信息的程序,也被称作网络蜘蛛或网络机器人。大型的爬虫程序被广泛应用于搜索引擎、数据挖掘等领域,个人用户或企业也可以利用爬虫收集对自身有价值的数据。举一个简单的例子,假设你在本地新开了一家以外卖生意为主的餐馆,现在要给菜品定价,此时便可以开发一个爬虫程序,在美团、饿了么、百度外卖这些外卖网站爬取大量其他餐馆的菜品价格作为参考,以指导定价。
  一个网络爬虫程序的基本执行流程可以总结为以下循环:
  1.下载页面
  一个网页的内容本质上就是一个HTML文本,爬取一个网页内容之前,首先要根据网页的URL下载网页。
  2.提取页面中的数据
  当一个网页(HTML)下载完成后,对页面中的内容进行分析,并提取出我们感兴趣的数据,提取到的数据可以以多种形式保存起来,比如将数据以某种格式(CSV、JSON)写入文件中,或存储到数据库(MySQL、MongoDB)中。
  3.提取页面中的链接
  通常,我们想要获取的数据并不只在一个页面中,而是分布在多个页面中,这些页面彼此联系,一个页面中可能包含一个或多个到其他页面的链接,提取完当前页面中的数据后,还要把页面中的某些链接也提取出来,然后对链接页面进行爬取(循环1-3步骤)。
  设计爬虫程序时,还要考虑防止重复爬取相同页面(URL去重)、网页搜索策略(深度优先或广度优先等)、爬虫访问边界限定等一系列问题。
  从头开发一个爬虫程序是一项烦琐的工作,为了避免因制造轮子而消耗大量时间,在实际应用中我们可以选择使用一些优秀的爬虫框架,使用框架可以降低开发成本,提高程序质量,让我们能够专注于业务逻辑(爬取有价值的数据)。接下来,《精通Scrapy网络爬虫》就带你学习目前非常流行的开源爬虫框架Scrapy。
  1.2Scrapy简介及安装
  Scrapy是一个使用Python语言(基于Twisted框架)编写的开源网络爬虫框架,目前由ScrapinghubLtd维护。Scrapy简单易用、灵活易拓展、开发社区活跃,并且是跨平台的。在Linux、MaxOS以及Windows平台都可以使用。Scrapy应用程序也使用Python进行开发,目前可以支持Python2.7以及Python3.4+版本。
  在任意操作系统下,可以使用pip安装Scrapy,例如:
  $pipinstallscrapy
  为确认Scrapy已安装成功,首先在Python中测试能否导入Scrapy模块:
  >>>importscrapy
  >>>scrapy.version_info
  (1,3,3)
  然后,在shell中测试能否执行Scrapy这条命令:
  $scrapy
  Scrapy1.3.3-noactiveproject
  ……

前言/序言

  关于《精通Scrapy网络爬虫
  如今是互联网的时代,而且正在迈入智能时代。人们早已意识到互联网中的数据是有待开采的巨大金矿,这些数据将会改善我们的生活,网络爬虫开发工作岗位的出现和不断增加正是基于对数据价值的重视。优秀的爬虫框架就像是开采金矿的强力挖掘机,如果你能娴熟地驾驶它们,就能大幅提高开采效率。
  《精通Scrapy网络爬虫》讲解目前最流行的Python爬虫框架Scrapy,它简单易用、灵活易拓展、文档丰富、开发社区活跃,使用Scrapy可以高效地开发网络爬虫应用。《精通Scrapy网络爬虫》的读者只需要有Python语言基础即可,我们从零基础、逐步由浅入深进行讲解。第1~8章讲解Scrapy开发的核心基础部分,其中包括:
  ●初识Scrapy
  ●编写Spider
  ●使用Selector提取数据
  ●使用Item封装数据
  ●使用ItemPipeline处理数据
  ●使用LinkExtractor提取链接
  ●使用Exporter导出数据
  ●项目练习
  第9~14章讲解实际爬虫开发中使用频率最高的一些实用技术,其中包括:
  ●下载文件和图片
  ●模拟登录
  ●爬取动态页面
  ●存入数据库
  ●使用HTTP代理
  ●分布式爬取
  《精通Scrapy网络爬虫》特色
  《精通Scrapy网络爬虫》的宗旨是以实用和实战为教学目标,主要特色是:
  ●所有基础部分的讲解都配有代码示例,而不仅仅是枯燥的文档。
  ●案例选材方面以讲解知识点为核心,尽量选择专门供练习爬虫技术的网站(不易变动)或贴近日常生活的网站(京东、知乎、豆瓣、360)进行演示。
  ●在讲解某些知识点时,对Scrapy源码进行分析,让读者能够“知其然并知其所以然”。
  另外,Python是一门简单易学、功能强大、开发效率极高的语言,近年来在网络爬虫、数据分析、机器学习等领域得到广泛认可。虽然Python很容易上手,但想灵活恰当地运用它也并不简单。作者在慕课网(www.imooc.com)上推出了一套《Python高级进阶实战》课程,可供有需求的读者进行参考:http://coding.imooc.com/class/62.html。
  致谢
  感谢康烁和陈渝老师在清华大学信息研究院工作期间对我在专业方面的耐心指导。
  感谢清华大学出版社的王金柱编辑给予我这次写作的机会以及在写作方面的指点。
  感谢赵佳音同事认真阅读《精通Scrapy网络爬虫》并提出了许多的宝贵建议。
  感谢剑超和任怡同学认真审阅《精通Scrapy网络爬虫》并对书中代码在多个Python版本上进行测试。
  感谢女儿刘真,她的笑容化解了写作《精通Scrapy网络爬虫》时偶尔的小烦躁。
  编者
  2017年8月8日


其他推荐