Scrapy 一个简单快速可扩展的爬虫框架

Posted Zinaer互联网

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scrapy 一个简单快速可扩展的爬虫框架相关的知识,希望对你有一定的参考价值。

最近需要帮其他部门同事爬些数据,所以更加深入了解和使用了之前接触的一个爬虫框架,Scrapy。

Scrapy 是一个由 Python 开发的简单、快速、可扩展,并且开源的爬虫框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

今天简单介绍下这个框架,也许哪一天你可能需要用到它。

通过一个例子来了解

为了展示 Scrapy 怎么获取你想要的数据,我们将通过一个简单的爬虫例子来说明。

下面是一个爬虫的代码,获取博客 http://blog.zinaer.com 文章的标题和发表时间:

import scrapyclass ZinaerBlogSpider(scrapy.Spider):    name = 'blog'    start_urls = [        'http://blog.zinaer.com'    ]    def parse(self, response):        for data in response.css('ul.post-list li'):            yield {                'title': data.css('span.post-meta::text').extract_first(),                'date': data.css('a.post-link::text').extract_first()            }

将上述代码放到一个 python 文件中,保存为 blog_spider.py 并使用 runspider 命令执行它:

$ scrapy runspider blog_spider.py -o blog.json

这样,博客里文章的标题和发表时间就会以 JSON 的格式保存下来。

[ {        "title":"Nov 12, 2017",        "date":"Go 语言八周年"    },    {        "title":"Nov 11, 2017",        "date":"人工智能领域最好的 5 种编程语言"    },    {        "title":"Nov 10, 2017",        "date":"Github 欢迎所有 CI 工具"    },    {        "title":"Nov 9, 2017",        "date":"几个掌握 CSS 网格布局的便捷资源"    },    {     ...    },    {        "title":"Oct 18, 2017",        "date":"为什么你需要另一款 Markdown 编辑器?"    },    {        "title":"Oct 17, 2017",        "date":"WiFi WPA2 安全加密协议被破解,路由器等一大波设备可能沦陷?"    }]

这其中发生了什么

当你运行上述命令时,Scrapy 在程序中找到相关定义,并通过爬虫引擎运行它。

抓取通过向 start_urls 属性中定义的 URL 发出请求,并调用默认的回调方法 parse, 将响应对象作为参数传递。在 parse 回调中,我们使用 CSS 选择器循环引用元素。

你可以注意到 Scrapy 的一个主要优势,请求是异步调用和处理的。也就是说,不需要等待一个请求和处理完成,它可以发送另一个请求或者做其它事情。即使某些请求或处理失败,其它请求仍然会继续。

虽然并发请求可以快速爬取相关内容,但是 Scrapy 还可以通过其它一些设置控制爬虫的行为,比如,在每个请求直接设置延迟,限制请求域或每个 IP 的并发数,甚至可以自动调节这些行为。

上面的例子,导出了 JSON 文件,你也可以轻松导出其它格式,比如:XML 或 CSV 或者存储到后端以及数据库中。

还有什么

你已经看到如何使用 Scrapy 从网站中提取和存储项目,这只是基础。Scrapy 提供了许多强大的功能,使得爬取数据更加简单和高效,比如:

  • 内置支持使用扩展 CSS 选择器和 XPath 表达式从 html/XML 选择和提取数据,使用正则表达式提取数据。

  • 交互式 shell 控制台,这个在尝试 CSS 和 XPath 来抓取数据,编写和调试的时候非常有用。

  • 内置支持多种格式输出,JSON, CSV, XML。并可以存储到多个后端,FTP,S3, 本地文件系统。

  • 强大的编码支持和自动检测,用于处理外部的,非标准的编码声明。

  • 强大的可扩展支持,允许你使用信号和定义良好的 API(中间件,扩展和管道)来增强自己的功能。

  • 广泛的内置扩展和中间件处理:cookies 和 session 处理;HTTP 功能,如压缩,身份验证,缓存;user-agent 模拟;robots.txt;爬虫深度限制等等。

  • Telnet 控制台,用于连接运行着 Scrapy 进程的 Python 控制台,从而编译和调试你的爬虫。

按进行赞赏

以上是关于Scrapy 一个简单快速可扩展的爬虫框架的主要内容,如果未能解决你的问题,请参考以下文章

爬虫框架——Scrapy

爬虫框架:scrapy

爬虫框架:scrapy

初识python爬虫框架Scrapy

爬虫之scrapy框架

爬虫框架:scrapy