第1章 初识Scrapy 1
1.1 网络爬虫是什么 1
1.2 Scrapy简介及安装 2
1.3 编写**个Scrapy爬虫 3
1.3.1 项目需求 4
1.3.2 创建项目 4
1.3.3 分析页面 5
1.3.4 实现Spider 6
1.3.5 运行爬虫 8
1.4 本章小结 11
第2章 编写Spider 12
2.1 Scrapy框架结构及工作原理 12
2.2 Request和Response对象 14
2.2.1 Request对象 15<p>第1章 初识Scrapy 1</p> <p>1.1 网络爬虫是什么 1</p> <p>1.2 Scrapy简介及安装 2</p> <p>1.3 编写**个Scrapy爬虫 3</p> <p>1.3.1 项目需求 4</p> <p>1.3.2 创建项目 4</p> <p>1.3.3 分析页面 5</p> <p>1.3.4 实现Spider 6</p> <p>1.3.5 运行爬虫 8</p> <p>1.4 本章小结 11</p> <p>第2章 编写Spider 12</p> <p>2.1 Scrapy框架结构及工作原理 12</p> <p>2.2 Request和Response对象 14</p> <p>2.2.1 Request对象 15</p> <p>2.2.2 Response对象 16</p> <p>2.3 Spider开发流程 18</p> <p>2.3.1 继承scrapy.Spider 19</p> <p>2.3.2 为Spider命名 20</p> <p>2.3.3 设定起始爬取点 20</p> <p>2.3.4 实现页面解析函数 22</p> <p>2.4 本章小结 22</p> <p>第3章 使用Selector提取数据 23</p> <p>3.1 Selector对象 23</p> <p>3.1.1 创建对象 24</p> <p>3.1.2 选中数据 25</p> <p>3.1.3 提取数据 26</p> <p>3.2 Response内置Selector 28</p> <p>3.3 XPath 29</p> <p>3.3.1 基础语法 30</p> <p>3.3.2 常用函数 35</p> <p>3.4 CSS选择器 36</p> <p>3.5 本章小结 40</p> <p>第4章 使用Item封装数据 41</p> <p>4.1 Item和Field 42</p> <p>4.2 拓展Item子类 44</p> <p>4.3 Field元数据 44</p> <p>4.4 本章小结 47</p> <p>第5章 使用Item Pipeline处理数据 48</p> <p>5.1 Item Pipeline 48</p> <p>5.1.1 实现Item Pipeline 49</p> <p>5.1.2 启用Item Pipeline 50</p> <p>5.2例子 51</p> <p>5.2.1 过滤重复数据 51</p> <p>5.2.2 将数据存入</p> <p>MongoDB 54</p> <p>5.3 本章小结 57</p> <p>第6章 使用LinkExtractor提取链接 58</p> <p>6.1 使用LinkExtractor 59</p> <p>6.2 描述提取规则 60</p> <p>6.3 本章小结 65</p> <p>第7章 使用Exporter导出数据 66</p> <p>7.1 指定如何导出数据 67</p> <p>7.1.1 命令行参数 67</p> <p>7.1.2 配置文件 69</p> <p>7.2 添加导出数据格式 70</p> <p>7.2.1 源码参考 70</p> <p>7.2.2 实现Exporter 72</p> <p>7.3 本章小结 74</p> <p>第8章 项目练习 75</p> <p>8.1 项目需求 77</p> <p>8.2 页面分析 77</p> <p>8.3 编码实现 83</p> <p>8.4 本章小结 88</p> <p>第9章 下载文件和图片 89</p> <p>9.1 FilesPipeline和</p> <p>ImagesPipeline 89</p> <p>9.1.1 FilesPipeline使用</p> <p>说明 90</p> <p>9.1.2 ImagesPipeline使用</p> <p>说明 91</p> <p>9.2 项目实战:爬取matplotlib</p> <p>例子源码文件 92</p> <p>9.2.1 项目需求 92</p> <p>9.2.2 页面分析 94</p> <p>9.2.3 编码实现 96</p> <p>9.3 项目实战:下载360图片 103</p> <p>9.3.1 项目需求 104</p> <p>9.3.2 页面分析 104</p> <p>9.3.3 编码实现 107</p> <p>9.4 本章小结 109</p> <p>第10章 模拟登录 110</p> <p>10.1 登录实质 110</p> <p>10.2 Scrapy模拟登录 114</p> <p>10.2.1 使用FormRequest 114</p> <p>10.2.2 实现登录Spider 117</p> <p>10.3 识别验证码 119</p> <p>10.3.1 OCR识别 119</p> <p>10.3.2 网络平台识别 123</p> <p>10.3.3 人工识别 127</p> <p>10.4 Cookie登录 128</p> <p>10.4.1 获取浏览器</p> <p>Cookie 128</p> <p>10.4.2 CookiesMiddleware</p> <p>源码分析 129</p> <p>10.4.3 实现BrowserCookies-</p> <p>Middleware 132</p> <p>10.4.4 爬取知乎个人</p> <p>信息 133</p> <p>10.5 本章小结 135</p> <p>第11章 爬取动态页面 136</p> <p>11.1 Splash渲染引擎 140</p> <p>11.1.1 render.html端点 141</p> <p>11.1.2 execute端点 142</p> <p>11.2 在Scrapy中使用Splash 145</p> <p>11.3 项目实战:爬取toscrape</p> <p>中的名人名言 146</p> <p>11.3.1 项目需求 146</p> <p>11.3.2 页面分析 146</p> <p>11.3.3 编码实现 147</p> <p>11.4 项目实战:爬取京东商城</p> <p>中的书籍信息 149</p> <p>11.4.1 项目需求 149</p> <p>11.4.2 页面分析 149</p> <p>11.4.3 编码实现 152</p> <p>11.5 本章小结 154</p> <p>第12章 存入数据库 155</p> <p>12.1 SQLite 156</p> <p>12.2 MySQL 159</p> <p>12.3 MongoDB 165</p> <p>12.4 Redis 169</p> <p>12.5 本章小结 173</p> <p>第13章 使用HTTP代理 174</p> <p>13.1 HttpProxyMiddleware 175</p> <p>13.1.1 使用简介 175</p> <p>13.1.2 源码分析 177</p> <p>13.2 使用多个代理 179</p> <p>13.3 获取免费代理 180</p> <p>13.4 实现随机代理 184</p> <p>13.5 项目实战:爬取豆瓣电影</p> <p>信息 187</p> <p>13.5.1 项目需求 188</p> <p>13.5.2 页面分析 189</p> <p>13.5.3 编码实现 194</p> <p>13.6 本章小结 198</p> <p>第14章 分布式爬取 199</p> <p>14.1 Redis的使用 200</p> <p>14.1.1 安装Redis 200</p> <p>14.1.2 Redis基本命令 201</p> <p>14.2 scrapy-redis源码分析 206</p> <p>14.2.1 分配爬取任务</p> <p>部分 207</p> <p>14.2.2 汇总爬取数据</p> <p>部分 214</p> <p>14.3 使用scrapy-redis进行分</p> <p>布式爬取 217</p> <p>14.3.1 搭建环境 217</p> <p>14.3.2 项目实战 218</p> <p>14.4 本章小结 224</p>显示全部信息前 言关于本书
如今是互联网的时代,而且正在迈入智能时代。人们早已意识到互联网中的数据是有待开采的巨大金矿,这些数据将会改善我们的生活,网络爬虫开发工作岗位的出现和不断增加正是基于对数据价值的重视。**的爬虫框架就像是开采金矿的**挖掘机,如果你能娴熟地驾驶它们,就能大幅提高开采效率。
本书讲解目前*流行的Python爬虫框架Scrapy,它简单易用、灵活易拓展、文档丰富、开发社区活跃,使用Scrapy可以**地开发网络爬虫应用。本书的读者只需要有Python语言基础即可,我们从零基础、逐步由浅入深进行讲解。第1~8章讲解Scrapy开发的核心基础部分,其中包括:
●初识Scrapy
●编写Spider
●使用Selector提取数据
●使用Item封装数据<p>关于本书</p> <p>如今是互联网的时代,而且正在迈入智能时代。人们早已意识到互联网中的数据是有待开采的巨大金矿,这些数据将会改善我们的生活,网络爬虫开发工作岗位的出现和不断增加正是基于对数据价值的重视。**的爬虫框架就像是开采金矿的**挖掘机,如果你能娴熟地驾驶它们,就能大幅提高开采效率。</p> <p>本书讲解目前*流行的Python爬虫框架Scrapy,它简单易用、灵活易拓展、文档丰富、开发社区活跃,使用Scrapy可以**地开发网络爬虫应用。本书的读者只需要有Python语言基础即可,我们从零基础、逐步由浅入深进行讲解。第1~8章讲解Scrapy开发的核心基础部分,其中包括:</p> <p>● 初识Scrapy</p> <p>● 编写Spider</p> <p>● 使用Selector提取数据</p> <p>● 使用Item封装数据</p> <p>● 使用Item Pipeline处理数据</p> <p>● 使用Link Extractor提取链接</p> <p>● 使用Exporter导出数据</p> <p>● 项目练习</p> <p>第9~14章讲解实际爬虫开发中使用频率*高的一些实用技术,其中包括:</p> <p>● 下载文件和图片</p> <p>● 模拟登录</p> <p>● 爬取动态页面</p> <p>● 存入数据库</p> <p>● 使用HTTP代理</p> <p>● 分布式爬取</p> <p>本书特色</p> <p>本书的宗旨是以实用和实战为教学目标,主要特色是:</p> <p>● 所有基础部分的讲解都配有代码示例,而不仅仅是枯燥的文档。</p> <p>● 案例选材方面以讲解知识点为核心,尽量选择专门供练习爬虫技术的网站(不易变动)或贴近日常生活的网站(京东、知乎、豆瓣、360)进行演示。</p> <p>● 在讲解某些知识点时,对Scrapy源码进行分析,让读者能够“知其然并知其所以然”。</p> <p>另外,Python是一门简单易学、功能强大、开发效率极高的语言,近年来在网络爬虫、数据分析、机器学习等领域得到广泛认可。虽然Python很容易上手,但想灵活恰当地运用它也并不简单。作者在慕课网(www.imooc.com)上推出了一套《Python**进阶实战》课程,可供有需求的读者进行参考:http://coding.imooc.com/class/62.html。</p> <p>致谢</p> <p>感谢康烁和陈渝老师在清华大学信息研究院工作期间对我在专业方面的耐心指导。</p> <p>感谢清华大学出版社的王金柱编辑给予我这次写作的机会以及在写作方面的指点。</p> <p>感谢赵佳音同事认真阅读全书并提出了许多的宝贵建议。</p> <p>感谢剑超和任怡同学认真审阅全书并对书中代码在多个Python版本上进行测试。</p> <p>感谢女儿刘真,她的笑容化解了写作本书时偶尔的小烦躁。</p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p>编 者 </p> <p>2017年8月8日</p>显示全部信息免费在线读第1章 初识Scrapy本章首先介绍爬虫的基本概念、工作流程,然后介绍Scrapy的安装和网络爬虫项目的实现流程,使读者对网络爬虫有一个大致的了解,并且建立起网络爬虫的编写思路。本章**讲解以下内容:? 网络爬虫及爬虫的工作流程。? Scrapy的介绍与安装。? 网络爬虫编写步骤。1.1 网络爬虫是什么网络爬虫是指在互联网上自动爬取网站内容信息的程序,也被称作网络蜘蛛或网络机器人。大型的爬虫程序被广泛应用于搜索引擎、数据挖掘等领域,个人用户或企业也可以利用爬虫收集对自身有价值的数据。举一个简单的例子,假设你在本地新开了一家以外卖生意为主的餐馆,现在要给菜品定价,此时便可以开发一个爬虫程序,在美团、饿了么、百度外卖这些外卖网站爬取大量其他餐馆的菜品价格作为参考,以指导定价。一个网络爬虫程序的基本执行流程可以总结为以下循环: 1.下载页面一个网页的内容本质上就是一个HTML文本,爬取一个网页内容之前,首先要根据网页的URL下载网页。2.提取页面中的数据当一个网页(HTML)下载完成后,对页面中的内容进行分析,并提取出我们感兴趣的数据,提取到的数据可以以多种形式保存起来,比如将数据以某种格式(CSV、JSON)写入文件中,或存储到数据库(MySQL、MongoDB)中。3.提取页面中的链接通常,我们想要获取的数据并不只在一个页面中,而是分布在多个页面中,这些页面彼此联系,一个页面中可能包含一个或多个到其他页面的链接,提取完当前页面中的数据后,还要把页面中的某些链接也提取出来,然后对链接页面进行爬取(循环1-3步骤)。设计爬虫程序时,还要考虑防止重复爬取相同页面(URL去重)、网页搜索策略(深度优先或广度优先等)、爬虫访问边界限定等一系列问题。从头开发一个爬虫程序是一项烦琐的工作,为了避免因制造轮子而消耗大量时间,在实际应用中我们可以选择使用一些**的爬虫框架,使用框架可以降低开发成本,提高程序质量,让我们能够专注于业务逻辑(爬取有价值的数据)。接下来,本书就带你学习目前非常流行的开源爬虫框架 Scrapy。1.2 Scrapy简介及安装Scrapy是一个使用Python语言(基于Twisted框架)编写的开源网络爬虫框架,目前由Scrapinghub Ltd维护。Scrapy简单易用、灵活易拓展、开发社区活跃,并且是跨平台的。在Linux、 MaxOS以及Windows平台都可以使用。Scrapy应用程序也使用Python进行开发,目前可以支持Python 2.7以及Python 3.4 版本。在任意操作系统下,可以使用pip安装Scrapy,例如:$ pip install scrapy为确认Scrapy已安装成功,首先在Python中测试能否导入Scrapy模块: import scrapy scrapy.version_info(1, 3, 3)然后,在shell中测试能否执行Scrapy这条命令:$ scrapyScrapy 1.3.3 - no active project
Usage: scrapy [options] [args]
Available commands: bench Run quick benchmark test commands fetch Fetch a URL using the Scrapy downloader genspider Generate new spider using pre-defined templates runspider Run a self-contained spider (without creating a project) settings Get settings values shell Interactive scraping console startproject Create new project version Print Scrapy version view Open URL in browser, as seen by Scrapy