Scrapy快速浏览——Scrapy1.8官方文档

2020-01-07  本文已影响0人  Sinchard

Scrapy快速浏览

Scrapy是一个用于对web站点进行抓取和提取结构化数据的应用框架,可用于数据挖掘、信息处理等多种用途。
  尽管Scrapy最初是为Web页面抓取设计的, 它也可以使用各种API (如 Amazon Associates Web Services) 或作为通用web爬虫来提取数据。

Spider实例讲解

为了展示Scrapy的特性,下面将演示一个Scrapy Spider示例,使用最简单的方法来运行蜘蛛。下面是一个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').get(),
                'author': quote.xpath('span/small/text()').get(),
            }

        next_page = response.css('li.next a::attr("href")').get()
        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": "The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid."
},
{
    "author": "Groucho Marx",
    "text": "Outside of a dog, a book is man's best friend. Inside of a dog it's too dark to read."
},
{
    "author": "Steve Martin",
    "text": "A day without sunshine is like, you know, night."
},
...]

刚才发生了什么

当你运行命令scrapy runspider quotes_spider.py, Scrapy在quotes_spider.py文件中查找Spider定义然后通过抓取引擎来运行它。
整个抓取过程首先通过针对start_urls属性中定义的URL(在本例中,仅请求“humor”类别的URL)发起请求,然后调用默认的回调方法parse,将响应对象作为参数传递。在parse回调函数中,使用CSS选择器遍历quote元素,提取引文内容和作者信息、生成Python字典实例并通过yield关键字返回,查找到下一页的链接,并使用与回调函数相同的 parse方法发起另一个请求。
在这展示了Scrapy的一个主要优点:异步调度和处理请求。这意味着Scrapy不需要等待请求完成和处理,它可以发送另一个请求或同时执行其他操作。这也意味着,即使某些请求失败或在处理时发生错误,其他请求也可以继续进行。
虽然这种方式能够进行非常快速的页面爬取(同时以容错的方式发送多个并发请求),但Scrapy也可以通过一些设置来控制爬虫的礼貌性。例如:在每个请求之间设置下载延迟、限制每个域或每个IP的并发请求数量,甚至使用自动限流扩展来根据情况自动进行限制。
注意
这是使用feed导出生成JSON文件,您可以轻松更改导出格式(例如XML或CSV)或存储后端(例如FTP或Amazon S3)。还可以编写项目管道以将项目存储在数据库中。

还有呢?

你已经看到了如何使用Scrapy从网站中提取和存储Item信息,但这只是表面现象。Scrapy提供了许多强大的功能,使scraping变得简单高效, 例如:

接下来是什么?

接下来的步骤是安装Scrapy按照教程学习如何创建一个完整的Scrapy项目并加入社区。谢谢你的关注!

由于官方文档尚未完成翻译,所以文档中的链接现在还不能正确跳转,请耐心等待!

上一篇 下一篇

猜你喜欢

热点阅读