初窥Scrapy
来源:互联网 发布:java怎么保留四位小数 编辑:程序博客网 时间:2024/06/06 02:57
Scrapy是一种用于爬取网站以及提取结构化数据的应用框架。其应用十分广泛,如数据挖掘,信息处理或历史归档等。
尽管Scrapy最初被设计为用来爬取网页,但它同时可依靠其他接口来提取数据(如亚马逊联合网络服务),或者可以作为一种通用的网络爬虫来使用。
带你过一个爬虫例子
为了给你展现Scrapy的能力,下面会带你过一个用Scrapy写成的非常简单的爬虫。
以下就是按照页码来爬取http://quotes.toscrape.com该网站上名言的爬虫代码:
将这段代码放进一个文本文档,并命名为quotes_spider.py,接着通过runspider命令来运行该爬虫:
scrapy runspider quotes_spider.py -o quotes.json
当爬虫运行结束后,在quotes.json文件中就可以看到以JSON格式存在的一串文本(包括作者和名言),看起来就像下面这张图所显示的那样:
刚发生了什么?
当你运行scrapy runspider quotes_spider.py -o quotes.json 这条命令时,Scrapy会查找其中的爬虫定义,并通过其爬虫引擎来运行该爬虫。
该爬虫通过给在start_urls属性中定义的网址(URL)提交请求(request)来启动(此刻为humor category页面的网址),并调用默认回调函数parse,将响应(response)作为参数传递给该函数。在parse函数中,我们通过CSS选择器来循环遍历名言所属的元素,接着将提取到的名言文本和作者通过一个Python字典返回,最后再查找下一页的链接并安排下一个请求(该请求同样使用parse作为回调函数)
Scrapy的优点之一:异步安排和处理请求。这表明Scrapy并不需要先等一个请求被处理完,它可以同时发送下一个请求或者进行其他操作。这也表明即使发生错误或出现某个请求失败的情况,其他请求也可以不受干扰继续向前。
这种异步方式能让爬取的速度变得非常快(在容错方式下,可以同时递交多个并发请求)。通过一些设置,Scrapy也可以让你控制爬取的状态。你可以设置一个请求递交的延迟时间(download delay),以此来限制每个域名或IP的并发请求数量,甚至可以使用自动节流扩展程序(auto-throttling extension)来自动调节爬取速度。
注意:
以上爬取出来的JSON文件是通过feed exports生成的,你完全可以更改导出格式(如XML或CSV),或更改存储后端(如FTP或Amazon S3)。你也可以写一个字段管道(item pipeline)将数据存入数据库中。
还有什么?
现在你已经看过怎么用Scrapy从一个网站来提取和存储数据字段了,但这只是冰山一角。Scrapy提供了许多强有力的功能来让数据爬取变得简单而又有效,比如:
·内置支持:可使用扩展的CSS选择器和XPath表达式从HTML/XML源码中选择和提取数据,同时支持正则表达式(regular expressions)。
·在数据抓取前,用于测试CSS和XPath表达式的交互式shell控制台(IPython aware),它在你编写和调试爬虫程序时非常有用。
·内置支持:可导出为JSON, CSV,和XML等多种格式并将它们存储在FTP, S3,和本地文件系统等多种后端中。
·强大的编码支持以及自动检测功能,以用于处理多种语言的,非标准的以及不完整的编码声明。
·强大的扩展性支持:允许你通过信号和完善的接口(中间件、扩展程序和管道)来插入你自己的功能。
·众多的内置扩展程序和中间件可用于处理:
-cookies和会话处理
-压缩、身份验证和缓存等HTTP功能
-用户代理欺骗
-爬虫协议
-爬取深度限制
-等等
·Telnet控制台:用于接入你Scrapy中的Python控制台,以此来检查和调试你的爬虫程序。
·其他强大的功能:可重复使用爬虫去爬取站点地图(Sitemap)和XML/CSV文件中的网站;通过媒体管道(media pipeline)来自动下载与所爬取字段有关的图片(或其他任何媒体)、缓存域名解析器等等!
下一步做什么?
接下来就是要安装Scrapy,跟随引导来学习如何创建一个完善的Scrapy项目,并加入这个Scrapy大家庭。感谢你的关注!
- scrapy-1-初窥scrapy
- 初窥scrapy
- 初窥Scrapy
- 初窥Scrapy(Py3.x)
- scrapy
- Scrapy
- scrapy
- Scrapy
- Scrapy
- Scrapy
- Scrapy
- Scrapy
- scrapy
- Scrapy
- scrapy
- Scrapy
- Scrapy
- Scrapy
- jQuery触发超链接a的跳转事件
- 最小堆创建以及过程中的疑惑
- nmap脚本使用总结
- 初始化如下一个3*3矩阵,定义getSum函数求它的对角线元素之和
- Kruskal重构树(货车运输)
- 初窥Scrapy
- 爱上写博客
- 钓鱼
- 认识物联网
- ov7725连接图
- Java面试题之static、构造函数 、继承
- 第一章(问题总结)
- Mysql
- 《OpenCV学习笔记目录》