scrapy(scrap意思)

Scrapy是一个用于爬取web站点并提取结构化数据的应用框架,通常我们称之为爬虫,一款优秀的python爬虫。

Scrapy 简介与上手

scrapy爬取的数据可被用在数据挖掘、信息处理、历史数据归档等非常广泛的数据分析和处理领域。

我们可以通过一个简单的例子来初步了解一下如何通过scrapy蜘蛛(spider)爬取web页面。

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 {
                'author': quote.xpath('span/small/text()').get(),
                'text': quote.css('span.text::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。然后执行以下命令:

scrapy runspider quotes_spider.py -o quotes.json
#或者:
python -m 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"

  },
#...
]

可以看到,每个项目包含两个字段:author和text。

我们现在来分析一下上边这段代码的执行过程。

  • 当运行scrapy runspider quotes_spider.py这个命令后,scrapy会从quotes_spider.py这个脚本加载其中定义的一个spider,并在爬虫引擎中执行这个spider定义的一些方法。
  • 爬虫引擎首先打开start_urls中定义的链接(http://quotes.toscrape.com/tag/humor/),成功后会调用默认的回调函数parse,将响应消息response作为参数传入parse函数。
  • parse回调函数使用css选择器选取并循环遍历response中的quote对象,从中提取中author和text字段。并查找页面中的next标签,以确定是否继续使用同样的方法爬取和解析“下一页”。

你应该已经注意到了使用scrapy的好处:页面请求是由scrapy异步地进行调度和处理的。

这意味着scrapy不需要等待某个请求的完成和处理,它可以同时发送其他请求或者执行其他业务。同样,某个请求失败或异常也不影响其他请求的执行。

除了可以快速爬取页面,scrapy还提供了一些配置项,用来调控爬取行为。我们可以设置请求间的间隔,可以控制每个域名或每个ip的并发请求数,这样使得爬取行为看起来不那么“粗暴”。scrapy甚至提供了扩展程序以自动调整这些参数。

当然,作为一个强大的爬虫框架,scrapy提供的功能远不止此。

  • 内置增强的css选择器和xpath表达式,用来选取和解析html和xml文件,支持使用正则表达式。
  • 提供一个交互式shell控制台,方便编写和调试spider。
  • 内置多种数据输出格式(json、csv、xml),并可将数据存储在多种后端系统(ftp、s3、本地文件系统)。
  • 支持页面编码自动检测
  • 丰富的插件,可用于处理cookies/session,支持http压缩、鉴权和缓存等特性,仿造user-agent等。

总的来说,用python做爬虫,基本绕不开scrapy。我们一起学习吧。

本文来自季莫投稿,不代表胡巴网立场,如若转载,请注明出处:https://www.hu85.com/229894.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 xxxxx@qq.com 举报,一经查实,本站将立刻删除。