爬虫工作量由小到大的思维转变---<第三十六章 Scrapy 关于CrawlSpider引发的议题>

这篇具有很好参考价值的文章主要介绍了爬虫工作量由小到大的思维转变---<第三十六章 Scrapy 关于CrawlSpider引发的议题>。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

因为scrapy-redis里面有两个spider,一个basespider,一个crawlspider;有人分不清他们的区别;本文就来掰一掰他们的事;

正文:

`CrawlSpider` 和 `Spider` 是两个不同的爬虫类,具有以下区别:

  • 1. `Spider` 类:`Spider` 是 Scrapy 中最基本的爬虫类。你可以从 `scrapy.Spider` 类派生出自定义的爬虫类。在基本的 `Spider` 类中,你需要定义 `start_urls` 和 `parse` 方法来指定起始 URL 和解析响应的逻辑。`Spider` 类提供了基础的请求发送和响应处理功能,并在需要时提供了回调函数来处理解析和处理响应的逻辑。
  • 2. `CrawlSpider` 类:`CrawlSpider` 是 Scrapy 提供的高级爬虫类之一,它是基于 `Spider` 类的扩展。`CrawlSpider` 类提供了更方便的机制用于定义和跟踪规则(rules),使得爬取复杂网站的操作更加简单。通过在 `CrawlSpider` 类中定义 `rules` 属性和回调函数,你可以指定抓取页面的链接和数据提取规则。`CrawlSpider` 能够自动根据规则解析链接并深度优先进行爬取。

`Spider` 类是 Scrapy 中最基本的爬虫类,提供了处理请求和解析响应的基本功能。而 `CrawlSpider` 类是基于 `Spider` 类的扩展,提供了更方便的机制用于定义和跟踪规则,使得爬取复杂网站的操作更加简单。如果你的爬虫需要根据特定的规则进行链接提取和页面抓取,`CrawlSpider` 类可能是更适合的选择。但如果你只需要简单的页面抓取和数据提取,`Spider` 类已经足够了。

------------也就是说,最大的区别就是个rules!!

那么,

rules的优势在哪?

  • 当使用 CrawlSpider 类和 rules 规则时,能够更方便地定义和管理页面的抓取规则,从而简化爬虫的编写和维护过程。
  • 相比于不使用 CrawlSpider 和 rules 的情况,使用规则的优势包括规则的自动化处理、链接提取、跟进和页面的解析减少了手动编写大量重复代码的工作量

案例:

from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class QuotesCrawler(CrawlSpider):
    name = "quotes_crawler"
    start_urls = ["http://quotes.toscrape.com/"]
    allowed_domains = ["quotes.toscrape.com"]
    
    rules = (
        Rule(LinkExtractor(restrict_xpaths="//a[@class='tag']"), follow=True),
        Rule(LinkExtractor(restrict_xpaths="//div[@class='quote']/span/a"), callback='parse_quote'),
    )
    
    def parse_quote(self, response):
        quote = {
            'text': response.xpath("//h1/text()").get(),
            'author': response.xpath("//h3/text()").get(),
            'tags': response.xpath("//div[@class='tags']/a/text()").getall(),
        }
        yield quote
案例讲解:

我们创建了一个名为 QuotesCrawler 的爬虫类,继承自 CrawlSpider。我们的目标是爬取名言网站(http://quotes.toscrape.com/)上的名言和标签。

  • start_urls:起始 URL,设置为名言网站的首页。
  • allowed_domains:限制爬虫只在该域名下进行爬取。
  • rules:定义了两个规则。
  • 第一个规则使用 LinkExtractor 和 restrict_xpaths,提取标签页面的链接,并通过 follow=True 让爬虫跟进这些链接。
  • 第二个规则使用 LinkExtractor 和 restrict_xpaths,提取名言详情页面的链接,并通过 callback='parse_quote' 指定回调函数处理这些页面。
  • parse_quote:作为回调函数,解析名言详情页面的响应,提取名言的文本、作者和标签,并以字典形式返回。

通过使用 CrawlSpider 和 rules,我们只需定义规则和回调函数,而无需编写大量的链接提取和跟进的代码。这样,Scrapy 会自动根据规则进行页面抓取和处理,大大减少了编写重复代码的工作量。同时,当网站结构变化时,我们只需修改规则,而不是整个爬虫逻辑。

--------也就是说,crawlspider的一个rules能减少抓取数据的代码量,方便管理;补:可能前些年还好,现在越来越多的网站开始各种css渲染/js渲染生成页面数据,你真用rules去搞,抓出来的好多都牛头不对马嘴;  

延伸一个知识点:

链接跟进(启用 `follow=True`)的优劣势:
  • - 优点:
    •   - 抓取更多页面:链接跟进可以使爬虫抓取到更多相关的页面,尤其是对于有关联关系的页面,如列表页和详情页。
    •   - 递归爬取:通过跟进链接,可以实现递归爬取,深入地获取更多内容和数据。
    •   - 更新抓取的数据:可以通过跟进链接来确保已经抓取的数据保持更新,捕捉最新的内容和评论。
    •   - 避免遗漏数据:某些网站可能在列表页中提供部分内容,启用链接跟进可确保获取到完整的页面内容,避免遗漏重要数据。
  • - 缺点:
    •   - 更多网络请求和数据抓取:跟进链接会导致爬虫抓取更多的页面,增加网络带宽和处理资源的消耗。
    •   - 可能会抓取无关页面:如果抓取的页面没有足够的筛选条件,可能会抓取到无关的页面,导致数据冗余或混乱。
  • 不启用链接跟进(将 `follow=False` 或不进行配置):

  • - 优点:
    •   - 简化抓取逻辑:不启用链接跟进可简化爬虫的抓取逻辑,只关注初始页面上的数据获取。
    •   - 控制抓取规模:不启用链接跟进可以控制抓取的深度和规模,避免抓取过多的页面。
  • - 缺点:
    •   - 只能抓取初始页面:不启用链接跟进会限制爬虫仅抓取初始页面上的数据,可能会错过与页面相关的其他内容。
    •   - 需要手动编写更多代码:不启用链接跟进需要手动编写代码来处理额外的链接和页面获取,增加工作量。

----这里想说的是,最好别链接! 链了感觉抓全了,你稍微一个不注意,抓一堆广告下来;徒增了负载...能手写,尽量手写~ 当然,你做搜索引擎,可是适当跟进,反正你服务器容量大,随便搞呗,宁可错抓1000不能放错一个.对吧...文章来源地址https://www.toymoban.com/news/detail-775780.html

到了这里,关于爬虫工作量由小到大的思维转变---<第三十六章 Scrapy 关于CrawlSpider引发的议题>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • eth入门之工作量证明 (POW)

    文档:工作量证明 (PoW) | ethereum.org 以太坊目前使用的共识协议被称为工作量证明 (PoW)。 这允许以太坊网络的节点就以太坊区块链上记录的所有信息的状态达成共识,并防止经济攻击。 接下来一年,工作量证明将被逐步淘汰,这有利于权益证明 (PoS) 的发展。 向权益证明 (Po

    2024年02月06日
    浏览(32)
  • 【实训项目】教师工作量管理系统

    目录 一、需求与分析 1. 项目概述 1.1 教师信息处理 1.2 教师工作量数据处理: 1.3 教师综合信息输出 2. 需求分析 3. 模块设计 3.1 功能模块 3.2 所有功能模块的流程图 二、设计与实现  1. 程序实现  1.1 登录系统 1.2 教师工作量管理系统  2. 程序设计 附:系列文章 计算每个老师

    2024年02月11日
    浏览(39)
  • 案例:缺陷个数与返工工作量强相关

    某公司积累了21个项目缺陷个数与返工工作量的数据,如下表所示: 项目序号 缺陷修复工时 缺陷数 1 9433 1445 2 2990 405 3 634 74 4 647 138 5 4960 710 6 1370 246 7 740 66 8 1223 218 9 2766 528 10 8302 1378 11 626 78 12 611 151 13 811 105 14 2090 320 15 1440 235 16 5160 784 17 7100 1030 18 7560 1239 19 1737 321 20 6830 987 21

    2024年02月15日
    浏览(29)
  • 简易区块链的搭建(2)——工作量证明

    1. big.Int 的一些常见方法和属性: SetInt64(x int64) :将一个 int64 类型的整数赋值给 big.Int 。 SetString(s string, base int) :将一个字符串表示的整数按照指定的进制转换为 big.Int 。 Add(x, y *big.Int) *big.Int :将两个 big.Int 相加,并返回结果。 Sub(x, y *big.Int) *big.Int :将一个 big.Int 减去另

    2024年04月25日
    浏览(36)
  • 工作量证明在验证码中的实际应用

    工作量证明(Proof-of-Work,以下简称“PoW”)在维基百科的介绍中指一般要求用户进行一些耗时适当的复杂运算,并且答案能被服务方快速验算,以此耗用的时间、设备与能源做为担保成本,以确保服务与资源是被真正的需求所使用。 在实际生活中可以例举为:学生进行考试

    2024年01月15日
    浏览(50)
  • 基于springboot+vue开发的教师工作量管理系

    springboot31 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了教师工作量管理系统的开发全过程。通过分析教师工作量管理系统管理的不足,创建了一个计算机管理教师工作量管理系统的方案。文章介绍了教师工作量管理系

    2024年02月05日
    浏览(40)
  • PHP从零实现区块链(网页版二)工作量证明

    源码地址:PHP从零实现区块链(二)工作量证明 - 简书 注:本例只是从网页版实现一下原理,源码非本人所写,只是将原帖的源码更改了一下,变成网页版 因为运行环境问题,本例暂时从windows转到ubuntu下,因为后面例子使用了gmp库的gmp_pow和gmp_cmp函数,而php在windows下暂时没

    2024年02月03日
    浏览(34)
  • 动手学区块链学习笔记(二):区块链以及工作量证明算法

    紧接上文,在介绍完区块链中的加密解密以及公钥私钥等算法后,本篇开始正式进入区块链概念与一个简单区块链系统的实现过程介绍。 什么是区块链? 区块链,就是一个又一个区块组成的链条。每一个区块中保存了一定的信息,它们按照各自产生的时间顺序连接成链条。

    2024年01月17日
    浏览(36)
  • 基于springboot+vue的教师工作量管理系统(前后端分离)

    博主主页 :猫头鹰源码 博主简介 :Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战 主要内容 :毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 随着计算机技术的发展以及计算机

    2024年01月23日
    浏览(38)
  • 区块链基础知识7-比特币挖矿原理/工作量证明

    在前面《区块链基础知识6-区块链记账原理》我们了解到记账是把交易记录、交易时间、账本序号、上一个Hash值等信息计算Hash打包的过程。 我们知道所有的计算和存贮是需要消耗计算机资源的,既然要付出成本,那节点为什么还要参与记账呢?在中本聪(比特币之父)的设

    2024年04月28日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包