Scrapy CLOSESPIDER_PAGECOUNT 设置无法正常工作

2023-12-07

我使用 scrapy 1.0.3,无法发现 CLOSESPIDER 扩展是如何工作的。 对于命令: scrapy 抓取domain_links --set=CLOSESPIDER_PAGECOUNT=1 正确的是一个请求,但对于两页计数: scrapy 抓取domain_links --set CLOSESPIDER_PAGECOUNT=2 是无限的请求。

所以请用简单的例子解释一下它是如何工作的。

这是我的蜘蛛代码:

class DomainLinksSpider(CrawlSpider):
    name = "domain_links"
    #allowed_domains = ["www.example.org"]
    start_urls = [ "www.example.org/",]

    rules = (

        # Extract links matching 'item.php' and parse them with the spider's method parse_item
        Rule(LinkExtractor(allow_domains="www.example.org"), callback='parse_page'),
    )

    def parse_page(self, response):
        print '<<<',response.url
        items = []
        item = PathsSpiderItem()

        selected_links = response.selector.xpath('//a[@href]')

        for link in LinkExtractor(allow_domains="www.example.org", unique=True).extract_links(response):
            item = PathsSpiderItem()
            item['url'] = link.url
            items.append(item)
        return items

甚至不适用于这个简单的蜘蛛:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class ExampleSpider(CrawlSpider):
    name = 'example'
    allowed_domains = ['karen.pl']
    start_urls = ['http://www.karen.pl']

    rules = (
        # Extract links matching 'category.php' (but not matching 'subsection.php')
        # and follow links from them (since no callback means follow=True by default).


        # Extract links matching 'item.php' and parse them with the spider's method parse_item
    Rule(LinkExtractor(allow_domains="www.karen.pl"), callback='parse_item'),
    )

    def parse_item(self, response):
        self.logger.info('Hi, this is an item page! %s', response.url)
        item = scrapy.Item()

        return item

但不是无穷大:

scrapy 抓取示例 --set CLOSESPIDER_PAGECOUNT=1 '下载者/request_count': 1,

scrapy 抓取示例 --set CLOSESPIDER_PAGECOUNT=2 '下载者/request_count':17,

scrapy 抓取示例 --set CLOSESPIDER_PAGECOUNT=3 “下载者/请求计数”:19,

也许是因为并行下载。 是的,对于 CONCURRENT_REQUESTS = 1,CLOSESPIDER_PAGECOUNT 设置适用于第二个示例。我会检查第一个 - 它也有效。 这对我来说几乎是无限的,因为带有许多网址(我的项目)的站点地图被抓取为下一页:)


CLOSESPIDER_PAGECOUNT是由控制CloseSpider扩展,它对每个响应进行计数,直到达到其限制,此时它告诉爬虫进程开始结束(完成请求并关闭可用插槽)。

现在,当您指定时,您的蜘蛛会结束的原因CLOSESPIDER_PAGECOUNT=1是因为在那一刻(当它得到第一个响应时)没有pending请求,它们是在第一个请求之后创建的,因此爬虫进程已准备好结束,而不考虑以下请求(因为它们将在第一个请求之后诞生)。

当您指定CLOSESPIDER_PAGECOUNT>1,您的蜘蛛被发现正在创建请求并填充请求队列。当蜘蛛知道何时完成时,仍然有待处理的请求,这些请求作为closing蜘蛛。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scrapy CLOSESPIDER_PAGECOUNT 设置无法正常工作 的相关文章

随机推荐

  • 音频播放无法开始

    NSError err Initialize audio player audioPlayer AVAudioPlayer alloc initWithContentsOfURL url error err audioPlayer dele
  • 在Go中,删除指针映射的条目会导致内存泄漏吗?

    第一次来到这里 首先NOTE in 切片技巧表明在剪切或删除指针切片中的元素时存在潜在的内存泄漏问题 地图也是如此吗 例如 https play golang org p 67cN0JggWY 在从地图中删除之前我们应该清零该条目吗 就像这
  • android.app.Application 无法转换为 android.app.Activity

    我正在尝试改变一个LinearLayout来自另一个类 但是当我运行此代码时 public class IRC extends PircBot ArrayList
  • 如何响应演员调用的结果?

    我们正在考虑使用 Akka HTTP Java API 使用路由 DSL 不清楚如何使用路由功能来响应 HttpRequest 使用无类型 Akka Actor 例如 在匹配 Route 路径后 我们如何将请求传递给 处理程序 ActorR
  • 实体框架-使其只读? [复制]

    这个问题在这里已经有答案了 可能的重复 如何使实体框架数据上下文只读 是否有配置设置或简单的方法使实体 只读 我有一个数据访问层 该层与作为 CRM 解决方案后端的数据库相对应 我们不想 无意或故意 写入 CRM UI 之外的数据库 但我们
  • 如何将 int[] 类型转换为 int?[]

    我正在使用 linq 查询来输出 int 数组 但我需要将其传递给仅接受 int 的方法 因此 在搜索了将 int 转换为 int 的方法之后 我发现了一些似乎可行的方法here 以下代码是一个简化的示例 显示了哪些内容有效 哪些无效 us
  • 如何以编程方式在 Windows 8 开始屏幕上放置磁贴?

    我正在构建一个 Windows 商店应用程序 我希望该应用程序的磁贴位于我的开始屏幕的特定位置 是否有任何 API 可以对我的图块在开始屏幕上的位置进行编码 提前致谢 不 您无法控制图块的移动位置 这由用户决定 Windows 8 环境设计
  • 如何将heroku 上回形针的上传目录更改为/tmp?

    我需要上传文件 然后使用回形针解析它们 目前它上传到 system文件夹中 这在heroku中是不允许的 我不需要持久上传 我解析它然后存储它们 所以我希望能够保存到 tmp 中然后解析 然后让它稍后被吹走 关于如何做到这一点的想法 如果我
  • 如何在R中两个单词之间的文本上进行gsub?

    EDIT 我想放置一个 n在我的文本中特定的未知单词之前 我知道这个未知词第一次出现在我的文本中将会在 树 和 湖 之间 前任 文本 text 1 TreeRULakeSunWater 2 A B C D EDIT 树 和 湖 永远不会改变
  • 地图不适用于加载的 Obj

    这是我之前的问题的延续here 我只是尝试向该对象的每一侧应用不同的纹理 但什么也没有出现 没有控制台错误 我相信我正在按正确的顺序应用事物 这应该很简单 但过去一个小时我一直在努力解决这个问题 下面是一个代码示例 function onL
  • Google Apps - 使用昵称发送电子邮件

    我在 google apps u 中有一个电子邮件帐户 电子邮件受保护 它有一个昵称 电子邮件受保护 我可以从 发送电子邮件吗 电子邮件受保护 多谢 确实 Google Apps 支持从您拥有的任何电子邮件地址 包括昵称 发送邮件 登录您的
  • 了解多重索引

    所以我在 csv 中有一个这样的示例数据集 name team date score John A 3 9 12 100 John B 3 9 12 99 Jane B 4 9 12 102 Peter A 9 9 12 103 Josie
  • 如何使用 Ember Data 查找模型?

    相当于什么 App Person find age 30 in the 新的 Ember 数据 IE 如何根据属性获取记录数组 ember data 1 0 0 beta2 中的等效方法现在是 this store find person
  • Java 中的 Context 到底是什么? [复制]

    这个问题在这里已经有答案了 我用 Google 搜索了这个并阅读了 Java 文档 但我有点困惑 有人可以解释一下什么是Context是简单的英语吗 用编程术语来说 它是较大的周围部分 可以具有any对当前工作单元的行为的影响 例如 使用的
  • 不处理条件渲染组件中的表单提交

    我有一个带有表单的自定义标记文件
  • 如何解码gzip数据?

    我有一个变量data 变量的类型为 TIdBytes 变量包含一些用 gzip 编码的数据 如何解码这些数据 如果您想手动解码数据 请查看DecompressGZipStream 的方法TIdCompressorZLib组件 或TDecom
  • 分子测试似乎忽略了ansible.cfg的remote_tmp设置

    我正在尝试使用molecule测试一个非常基本的角色 venv red jumphost docker ops cat roles fake role tasks main yml tasks file for fake role name
  • 在 ruby​​ 中从自身获取实例变量名称

    我有一个实例变量 foo我想写一些代码来获取字符串 foo 有什么提示吗 如果您拥有的只是对该对象的引用 那么您就无法真正干净利落地完成它 def foo bar something end def bar value value no c
  • DATA 和 IMAGE 填充在两行中。我想将它们绑定在一行中

    我要第二次问这个问题 我会把它说清楚 这样你就可以帮助我 好吧 让我们开始吧 我有一个注册流程 我把这个过程分成了两页 第一页仅用于 个人信息 然后 当我单击下一步按钮时 将出现下一页 postbackURL 此页面用于 上传照片 页面 他
  • Scrapy CLOSESPIDER_PAGECOUNT 设置无法正常工作

    我使用 scrapy 1 0 3 无法发现 CLOSESPIDER 扩展是如何工作的 对于命令 scrapy 抓取domain links set CLOSESPIDER PAGECOUNT 1 正确的是一个请求 但对于两页计数 scrap