一目了然

Scrapy是用于抓取网站并提取结构化数据的应用程序框架,可用于广泛的有用应用程序,如数据挖掘,信息处理或历史存档。

即使Scrapy最初是为了网页抓取而设计的,它也可以用于使用API​​(如Amazon Associates Web Services)或通用网页抓取工具提取数据。

示范蜘蛛的漫步

为了向您展示Scrapy带给您的是什么,我们将以您使用最简单的方式运行一个蜘蛛,以一个Scrape Spider为例。

这是一个蜘蛛的代码,从网站http://quotes.toscrape.com中删除着名的引号,跟随分页:

import scrapy


class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/tag/humor/',
    ]

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').extract_first(),
                'author': quote.xpath('span/small/text()').extract_first(),
            }

        next_page = response.css('li.next a::attr("href")').extract_first()
        if next_page is not None:
            yield response.follow(next_page, self.parse)

将其放在文本文件中,将其命名为quotes_spider.py,然后使用runspider命令运行spider:

scrapy runspider quotes_spider.py -o quotes.json

当这完成后,您将在quotes.json文件中将JSON格式的引号列表,包含文本和作者,如下所示(在此重新格式化以便更好的阅读):

[{
    "author": "Jane Austen",
    "text": "\u201cThe person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.\u201d"
},
{
    "author": "Groucho Marx",
    "text": "\u201cOutside of a dog, a book is man's best friend. Inside of a dog it's too dark to read.\u201d"
},
{
    "author": "Steve Martin",
    "text": "\u201cA day without sunshine is like, you know, night.\u201d"
},
...]

刚刚发生了什么?

当您运行命令scrapy runspider quotes_spider.py时,Scrapy在其中查找了一个Spider定义,并通过其履带式引擎运行它。

通过向start_urls属性中定义的URL(在这种情况下,仅为幽默类别中的引号的URL)发出请求,并且将响应对象作为参数传递给默认的回调方法解析,从而开始爬行。在parse回调中,我们使用CSS Selector循环引用引用元素,产生一个带有提取的引号文本和作者的Python dict,查找下一页的链接,并使用与回调相同的解析方法调度另一个请求。

在这里,您注意到Scrapy的主要优点之一:请求被异步计划和处理。这意味着Scrapy不需要等待完成和处理的请求,它可以在此期间发送另一个请求或做其他的事情。这也意味着即使某些请求失败或处理它时发生错误,其他请求仍然可以继续进行。

虽然这样,您可以进行非常快速的抓取(同时发送多个并发请求,以容错方式)Scrapy还可以通过一些设置来控制爬网的礼貌。您可以在每个请求之间设置下载延迟,限制每个域或每个IP的并发请求数量,甚至使用自动调节扩展名来自动计算出这些延迟。

注意

这是使用Feed导出来生成JSON文件,您可以轻松地更改导出格式(例如,XML或CSV)或存储后端(例如,FTP或Amazon S3)。您还可以编写一个项目管道来将项目存储在数据库中。

还有什么?

您已经看到如何使用Scrapy从网站中提取和存储项目,但这只是表面。刮擦提供了许多强大的功能,使刮削容易和高效,如:

内置支持使用扩展CSS选择器和XPath表达式从HTML / XML源中选择和提取数据,使用使用正则表达式提取的辅助方法。

一个交互式shell控制台(IPython感知),用于尝试CSS和XPath表达式来擦除数据,在编写或调试您的蜘蛛时非常有用。

内置支持以多种格式(JSON,CSV,XML)生成Feed导出,并将它们存储在多个后端(FTP,S3,本地文件系统)

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

强大的可扩展性支持,允许您使用信号和明确定义的API(中间件,扩展和管道)来插入自己的功能。

广泛的内置扩展和中间件处理:

Cookie和会话处理

HTTP功能,如压缩,身份验证,缓存

用户代理欺骗

的robots.txt

爬行深度限制

和更多

一个Telnet控制台,用于挂接在Scrapy进程中运行的Python控制台,以便内部检查和调试您的爬虫

加上其他诸如可重复使用的蜘蛛之类的优点,可从Sitemaps和XML / CSV Feed中抓取网站,这是一种媒体管道,用于自动下载与被刮取的项目相关联的图像(或任何其他媒体),缓存DNS解析器等等!

下一步是什么?

接下来的步骤是安装Scrapy,遵循本教程,了解如何创建一个完整的Scrapy项目并加入社区。感谢您的关注!

results matching ""

    No results matching ""