zoukankan      html  css  js  c++  java
  • 一、了解Scrapy

    零、什么是 Scrapy

    Scrapy 是一个用于爬取网站并提取结构化数据的高效爬虫框架,它可以用于各种应用程序/项目,比如数据挖掘、信息处理和档案处理等。最初设计 Scrapy 是用来爬取 Web 数据的,但是现在也可以将它用于爬取 API 信息和作为通用 Web 搜索器来提取数据。

    一、演示项目

    为了向您展示Scrapy带来的好处,我将使用最简单的方式介绍 Scrapy 的示例。下面我们以爬取 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命令来运行这个程序。

    scrapy runspider quotes_spider.py -o quotes.json
    

    上述命令执行完成后将会在 quotes_spider.py 的同级目录中出现一个 quotes.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 会在其中查找 Spider 定义,并通过内含的搜索器引擎来运行它。程序开始运行时,会对 start_urls 属性中定义的 URL 发送请求,并将响应结果作为参数传递给默认的回调方法 parse ,在 parse 中我们使用 CSS 选择器遍历 quote 元素,生成包含从响应结果中提取出的文本信息和作者,并查找下一页的链接,最后使用和回调函数相同的方法去请求下一页。
    目前为止你可以看到 Scrapy 的主要优势之一:请求是异步调度和处理的。这意味着 Scrapy 无需等待请求完成和处理,它可以同时发送另一个请求或执行其他操作。也意味着即使某些请求失败或在处理过程中发生错误,其他请求也可以继续执行。尽管这这样能够进行非常快的爬取网页,但是还可以通过一些设置来限制爬取网站的方式。例如可以执行以下操作:设置每个请求之间的下载延迟,限制每个域或每个IP的并发请求数量。

    二、其他内容

    现在你已经了解了如何使用 Scrapy 从网站提取数据以及存储项目了,但这仅仅是冰山一角。Scrapy 提供了许多强大的功能,使得抓取网页变得简单而有效,例如:

    1. 使用扩展的 CSS 选择器和 XPath 表达式从HTML/XML源中选择和提取数据,以及使用正则表达式提取的辅助方法;
    2. 具有一个交互式的 Shell 控制台,用于测试编写的 CSS 和 XPath 表达式的效果,这在编写或调试 Spider 时非常有用;
    3. 内置多种数据保存格式;
    4. 强大的编码支持和自动检测功能,用于处理外来的非标准的和存在问题的编码声明;
    5. 强大的可扩展性支持,可以使用 signals 和 AP I来插入自己编写的功能。
    6. 广泛的内置扩展和中间件用于处理:
    • Cookie和会话处理
    • HTTP功能,如压缩,身份验证,缓存
    • 用户代理欺骗
    • robots.txt
    • 爬行深度限制
    • and more
    1. 具有 Telnet 控制台,用于链接在 Scrapy 进程内运行的 Python 控制台来调试爬虫程序;
    2. 其他可重复使用的东西,如可以从 Sitemaps 和 XML/CSV 源爬取内容,自动下载与被抓取的项目关联的图像(或任何其他媒体)的媒体管道,缓存的DNS解析器等等!

    三、接下来

    接下来的步骤是安装 Scrapy,请按照本教程了解如何创建全面的刮刮项目并加入社区
    S解析器等等!

    三、接下来

    接下来的步骤是安装 Scrapy,请按照本教程了解如何创建全面的刮刮项目并加入社区

  • 相关阅读:
    C# 将数据导出到Excel汇总
    jquery 常用技巧
    JavaScript:世界上误解最深的语言
    对于jQuery中$.ajax方法的新认识
    JQuery上传插件Uploadify使用详解
    HTTP中Get与Post的区别
    Javascript中最常用的55个经典技巧
    C# params参数的应用
    10种JavaScript特效实例让你的网站更吸引人
    jQuery设计思想
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/12778130.html
Copyright © 2011-2022 走看看