美文网首页
Scrapy快速浏览——Scrapy1.8官方文档

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

作者: Sinchard | 来源:发表于2020-01-07 19:31 被阅读0次

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变得简单高效, 例如:

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

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

  • 内建支持以多种格式(JSON、CSV、XML)生成feed导出并将其存储在多个后端(FTP、S3、本地文件系统)

  • 强大的编码支持和自动检测,用于处理其他的、非标准和损坏的编码声明。

  • 强大的扩展性,允许您使用信号和定义良好的API(中间件、 扩展管道)插入自己的功能。

  • 大量的内置扩展和中间件:

    • cookies和会话处理
    • HTTP特性,如压缩、身份验证、缓存
    • user-agent假冒
    • robots.txt
    • 爬取深度限制
    • 等等
  • 一个Telnet控制台,用于连接到运行在Scrapy进程控制台,以便对爬虫程序进行检查和调试

  • 还有其他一些优点,如可重用的蜘蛛,从站点地图和XML/CSV源抓取站点,一个自动下载图像(或任何其他媒体)的媒体管道,一个缓存DNS解析器等!

接下来是什么?

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

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

相关文章

网友评论

      本文标题:Scrapy快速浏览——Scrapy1.8官方文档

      本文链接:https://www.haomeiwen.com/subject/ijnractx.html