第一步1:一目了然(了解)

Scrapy at a glance(一目了然)

Scrapy是一个用于对web站点进行抓取和提取结构化数据的应用框架,可用于数据挖掘、信息处理或历史档案等多种有用的应用。
尽管Scrapy最初是为web抓取(web scraping)而设计的,但它也可以使用api(如亚马逊Web服务(Amazon Associates web Services))或作为通用web爬虫来提取数据。

Walk-through of an example spider(一个小例子)

为了向您展示Scrapy带来了什么,我们将使用最简单的运行爬虫的方法向您介绍Scrapy 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)

将其放入文本文件中,将其命名为qutes_spider.py,然后使用runSpider命令运行爬虫:

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"
},
...]

What just happened?(刚刚发生了什么?)

当您运行scrapy runSpider quotes_spider.py命令时,Scrapy会在其中查找Spider定义,并通过其爬虫引擎运行它。

爬虫首先请求start_urls属性中定义的URL(在本例中,仅请求humor类别中的引言的URL),然后调用默认的回调方法parse,将Response对象作为参数传递。 在回调函数parse中,我们使用CSS选择器遍历引用元素(quote elements),生成包含提取的引言的文本和作者的Python字典,查找指向下一页的链接,并使用与回调函数相同的parse方法调度(解析)另一个请求。

在这里,您会注意到Scrapy的主要优势之一:请求是异步调度和处理的(scheduled and processed asynchronously)。 这意味着Scrapy无需等待请求完成和处理,它可以同时发送另一个请求或执行其他操作。 这也意味着即使某些请求失败或在处理过程中发生错误,其他请求也可以继续执行。

虽然这使您能够进行非常快速的爬取(以容错的方式同时发送多个并发请求),但是Scrapy还允许您可以通过一些设置(a few settings)来控制爬取的礼貌。 您可以执行以下操作,例如设置每个请求之间的下载延迟,限制每个域或每个IP的并发请求数量,甚至使用尝试自动找出这些请求的自动限制扩展( using an auto-throttling extension )。

注意:
这是使用提要导出(feed exports)来生成JSON文件,您可以轻松更改导出格式(例如XML或CSV)或存储后端(例如FTP或Amazon S3)。 您还可以编写项目管道(item pipeline)以将项目存储在数据库中。

What else?(还有什么?)

您已经了解了如何使用Scrapy从网站提取和存储项目,但这仅仅是表面上的。 Scrrapy提供了许多功能强大的功能,可让您轻松高效地进行抓取,例如:

  • 内置支持使用扩展的CSS选择器和XPath表达式从HTML/XML源中选择和提取( selecting and extracting)数据,以及使用正则表达式提取的助手方法。
  • 一个交互式的Shell控制台(interactive shell console)(支持IPython),用于尝试CSS和XPath表达式以获取(爬取)数据,在编写或调试Spider(爬虫)时非常有用。
  • 内置支持以多种格式(JSON、CSV、XML)生成feed导出( generating feed exports)并将其存储在多个后端(FTP、S3、本地文件系统)
  • 强大的编码支持和自动检测功能,用于处理外来的,非标准的和损坏的编码声明。
  • 强大的可扩展性支持(Strong extensibility support),使您可以使用信号(signals)和定义明确的API(中间件,扩展(extensions)和管道( pipelines))插入自己的功能。
  • 广泛的内置扩展和中间件,用于处理:
    • Cookie(cookies)和会话(session)处理
    • HTTP特性,如压缩、身份验证、缓存
    • 用户代理伪装
    • robots.txt(网站爬虫许可内容)
    • 爬虫爬取深度限制
    • 等等
  • 一个Telnet控制台(Telnet Console),用于连接到运行在Scrapy进程中的Python控制台,以便对爬虫程序进行内省和调试
  • 再加上其他一些优点,如可重用的爬虫,从站点地图(Sitemaps)和XML/CSV源抓取站点,一个自动下载图片( automatically downloading images)(或任何其他媒体)的媒体管道,一个缓存DNS解析器,等等!

What’s next?(接下来是什么?)

接下来的步骤是安装Scrapy(install Scrapy),按照教程学习( follow through the tutorial)如何创建一个完整的Scrapy项目并加入社区(join the community)。谢谢您的关注!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值