“download_slot”在 scrapy 中如何工作

2024-04-14

我在 scrapy 中创建了一个脚本来解析author name来自其着陆页的不同帖子,然后将其传递到parse_page方法使用meta关键字以打印post content随着author name同时。

我用过下载槽在元关键字中,据称该关键字掩盖了脚本运行得更快的情况。虽然没有必要遵守我在这里尝试应用的逻辑,但我想坚持它只是为了了解如何下载槽在任何脚本中都可以工作以及为什么。我进行了很多搜索以了解更多信息下载槽但我最终得到了一些链接,例如this one https://github.com/scrapy/scrapy/issues/3585.

示例用法download_slot(不过我不太确定):

from scrapy.crawler import CrawlerProcess
from scrapy import Request
import scrapy

class ConventionSpider(scrapy.Spider):
    name = 'stackoverflow'
    start_urls = ['https://stackoverflow.com/questions/tagged/web-scraping']

    def parse(self,response):
        for link in response.css('.summary'):
            name = link.css('.user-details a::text').extract_first()
            url = link.css('.question-hyperlink::attr(href)').extract_first()
            nurl = response.urljoin(url)
            yield Request(nurl,callback=self.parse_page,meta={'item':name,"download_slot":name})

    def parse_page(self,response):
        elem = response.meta.get("item")
        post = ' '.join([item for item in response.css("#question .post-text p::text").extract()])
        yield {'Name':elem,'Main_Content':post}

if __name__ == "__main__":
    process = CrawlerProcess({
        'USER_AGENT': 'Mozilla/5.0',
    })
    process.crawl(ConventionSpider)
    process.start()

上面的脚本运行完美。

我的问题:如何download_slot在 scrapy 中工作吗?


让我们从Scrapy架构 https://docs.scrapy.org/en/latest/topics/architecture.html#data-flow。当您创建一个scrapy.Request,Scrapy引擎将请求传递给下载器以获取内容。下载器将传入的请求放入插槽中,您可以将其想象为独立的请求队列。然后轮询队列并处理每个单独的请求(下载内容)。

现在,这是关键部分。为了确定将传入请求放入哪个槽,下载器会检查request.meta for download_slot钥匙。如果存在,它将请求放入具有该名称的槽中(如果尚不存在则创建它)。如果download_slotkey 不存在,它会将请求放入请求 URL 指向的域(更准确地说是主机名)的槽中。

这解释了为什么您的脚本运行得更快。您创建多个下载器插槽,因为它们基于作者的姓名。如果您没有这样做,它们将根据域(始终是stackoverflow.com)。因此,您可以有效地提高下载内容的并行性。

这个解释有点简单,但它应该能让您了解正在发生的事情。你可以检查the code https://github.com/scrapy/scrapy/blob/92801850546121f2faf95fd21c923904fde35c28/scrapy/core/downloader/__init__.py#L125你自己。

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

“download_slot”在 scrapy 中如何工作 的相关文章

  • 从字典的元素创建 Pandas 数据框

    我正在尝试从字典创建一个 pandas 数据框 字典设置为 nvalues y1 1 2 3 4 y2 5 6 7 8 y3 a b c d 我希望数据框仅包含 y1 and y2 到目前为止我可以使用 df pd DataFrame fr
  • 数据框 - 平均列

    我在 pandas 中有以下数据框 Column 1 Column 2 Column3 Column 4 2 2 2 4 1 2 2 3 我正在创建一个数据框 其中包含第 1 列和第 2 列 第 3 列和第 4 列等的平均值 ColumnA
  • 将 C++ 指针作为参数传递给 Cython 函数

    cdef extern from Foo h cdef cppclass Bar pass cdef class PyClass cdef Bar bar def cinit self Bar b bar b 这总是会给我类似的东西 Can
  • 为什么第二个 request.session cookies 返回空?

    我想使用 requests Session post 登录网站 但是当我已经登录主页 然后进入帐户页面时 看来cookies还没有保存 因为cookies是空的 而且我无法进入正确的帐户页面 import requests from bs4
  • 以类型化内存视图作为成员的结构定义

    目前我正在尝试让一个具有类型化内存视图的结构能够工作 例如 ctypedef struct node unsigned int inds 如果 inds 不是内存视图 据我所知 它可以完美地工作 然而 通过内存视图并使用类似的东西 def
  • OpenCV 跟踪器:模型未在函数 init 中初始化

    在视频的第一帧 我运行一个对象检测器 它返回对象的边界框 如下所示
  • python 中的 h2o 框架子集

    如何在 python 中对 h2o 框架进行子集化 如果 x 是一个 df 并且 Origin 是一个变量 那么在 pandas 中我们通常可以通过以下方式进行子集化 x x Origin AAF 但使用 h2o 框架会出现以下错误 H2O
  • 在 Mac OSX 上从 Python 3.6 运行 wine 命令

    我正在尝试用 Python 编写一个打开的脚本wine然后发送代码到wine终端打开一个 exe程序 这 exe程序也是命令驱动的 我可以打开wine 但我无法进一步 import shlex subprocess line usr bin
  • 更改QLineEdit的ClearButton图标

    我想在Windows 10 1909 64位 上的Python 3 8和PyQt5 5 15 0 上更改我的QLineEdit的ClearButton图标 稍后我想在Linux上运行代码 我尝试应用此处找到的代码 如何在 QLineEdit
  • 如何在 Django Rest 框架中编写“删除”操作的测试

    我正在为 Django Rest Framework API 编写测试 我一直在测试 删除 我对 创建 的测试工作正常 这是我的测试代码 import json from django urls import reverse from re
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • NumPy 相当于 Keras 函数 utils.to_categorical

    我有一个使用 Keras 进行机器学习的 Python 脚本 我正在构建 X 和 Y 它们分别是特征和标签 标签的构建方式如下 def main depth 10 nclass 101 skip True output True video
  • App Engine 实体到字典

    将 google app engine 实体 在 python 中 复制到字典对象的好方法是什么 我正在使用 db Expando 对象 所有属性均为扩展属性 Thanks 有一个名为foo尝试 foo dict
  • 如何在 Seaborn 中的热图轴上表达类

    我使用 Seaborn 创建了一个非常简单的热图 显示相似性方阵 这是我使用的一行代码 sns heatmap sim mat linewidths 0 square True robust True sns plt show 这是我得到的
  • 将字符串中的随机字符转换为大写

    我尝试随机附加文本字符串 这样就不只是有像这样的输出 gt gt gt david 我最终会得到类似的东西 gt gt gt DaViD gt gt gt dAviD 我现在的代码是这样的 import random import stri
  • 如何通过函数注释指示函数需要函数作为参数,或返回函数?

    您可以使用函数注释 http www python org dev peps pep 3107 在python 3中指示参数和返回值的类型 如下所示 def myfunction name str age int gt str return
  • 根据多个阈值将 SciPy 分层树状图切割成簇

    我想将 SciPy 的树状图切割成多个具有多个阈值的簇 我尝试过使用 fcluster 但它只能削减一个阈值 例如 这是我从另一个问题中摘取的一段代码 import pandas data pandas DataFrame total ru
  • 在 numpy 中连接维度

    我有x 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 2 3 I want 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 6 也就是说 我想连接中间维度的所有项目 在这种特殊情况下我可以得到这
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • 如何在 scikit 中加载 CSV 数据并将其用于朴素贝叶斯分类

    尝试加载自定义数据以在 Scikit 中执行 NB 分类 需要帮助将示例数据加载到 Scikit 中 然后执行 NB 如何加载目标的分类值 使用相同的数据进行训练和测试 或使用完整的数据集进行测试 Sl No Member ID Membe

随机推荐

  • 如何修复此 UnknownHostException?

    public static final String readURL String url throws Throwable try InputStream in InputStream fetch url byte bArr readBy
  • Sybase:HAVING 对行进行操作?

    我遇到过以下 SYBASE SQL Setup first create table t id int ts int go insert into t values 1 2 insert into t values 1 10 insert
  • 如何让 AudioKit 从远程 URL 传输音频文件?

    我正在尝试在 iOS 应用程序 Swift 4 中播放来自 URL 的音频文件 我希望它们在下载时缓冲和播放 我非常喜欢 AudioKit 但是对于我来说 我无法弄清楚如何让它读取远程文件 有什么建议么 你找不到它 因为它不在那里 我们从未
  • SQLite Python 插入 - 提供的绑定数量不正确

    如果这是多余的 我很抱歉 我花了很多时间试图找到答案 但提供的技巧似乎没有任何作用 我正在尝试使用 Python 将股票数据的 csv 文档读入 SQLite 雅虎财经 Ticker Open High Low Close Volume A
  • 回调中的 Tornado IOLoop 异常 Celery 工作线程中没有

    我在用tornado ioloop inside celery工人 因为我需要使用 mongodb class WorkerBase gen engine def foo self args callback bar Python Cele
  • 绑定中的 JAXB 空节点

    JAXB无法解析此示例的绑定
  • UTF-8 编码、JSP、jQuery、Spring 的问题

    我在 apache tomcat 6 中有一个带有 spring jsp 和 jquery 的 Web 应用程序 一个 jsp 页面有一个表单 该表单通过 jquery 进行的 ajax 调用将数据发送到我后端的 Spring MultiA
  • .net core azure部署失败:项目文件不存在

    我在 Azure 中设置了一个应用程序服务应用程序 该应用程序设置为在提交到团队服务 git 存储库时部署 到目前为止 这一直工作正常 但部署失败 并显示 MSBUILD error MSB1009 Project file does no
  • php 字符串末尾的 Substr?

    我有这种数组 我会让它变得非常简单易懂 picture artist2 1 thumb jpg artist2 2 jpg artist2 3 thumb jpg artist2 4 jpg artist2 5 thumb jpg 现在我想
  • WPF 断边

    我在使用 WPF 时遇到了一个相当奇怪的问题 当我将按钮放置在窗体上时 它们在设计时看起来很好 在 Windows XP 上看起来也很好 但当应用程序在 Windows 7 上运行时 边缘会损坏 Here is a screen shot
  • 访问 WinForms 中的 ToolStripMenuItem 子项

    H all 我在 Winform 中创建了一个菜单条 但不是动态的 而且这一切都是不可见的 当用户拥有权限时才可见 我的用户名之一拥有完全的权利 为此我写了下面的代码 private void menuActive MenuStrip me
  • 尝试加载动画时 Resources$NotFoundException

    我们在 Google Play 市场上的应用程序在某些设备上抛出了一个奇怪的异常 我看到以下堆栈跟踪 android content res Resources NotFoundException File res anim ani in
  • 使用 perl 包时将参数传递给它

    如何在使用包时传递一些参数 例如 use Test More tests gt 21 我无法找到有关此功能的任何有价值的文档 通过这样的论点有什么优点和缺点吗 use My Module LIST https metacpan org po
  • React Native改变监听端口

    我正在使用 React Native Android 并且在 Android 设备上部署应用程序时遇到问题 当我跑步时 react native启动 它不会在端口上启动开发服务器8081 我尝试了以下提到的一些选项 https reactn
  • 我设置了 hellomap 示例并收到以下错误

    我正在 Android Studio 中工作 并且在运行时不断收到此错误 E CL magma ERROR CL magma Unable to open shader file shaders gles2 0 Primitive shad
  • NotifyPropertyChanged 线程安全吗?

    我正在看NotifyPropertyChanged from INotifyPropertyChanged并注意到在 Microsoft 的示例中 如下所示 http msdn microsoft com en us library sys
  • Android:socket.io io.socket.engineio.client.EngineIOException:XHR 轮询错误

    有时我会收到此错误 io socket engineio client EngineIOException xhr 轮询错误 我的连接到套接字的代码 try HostnameVerifier myHostnameVerifier new H
  • 如何使 SendKeys 在 IBM Host Access Library 中同步动作

    我用用于 COM 自动化的 IBM 主机访问类库 https www 01 ibm com support knowledgecenter SSEQ5Y 6 0 0 com ibm pcomm doc books html host acc
  • google api 控制台删除了我注册的应用程序

    几个月前 我在 Google 开发者控制台中注册了两个 Android 应用程序 以使用 Google 地图 Android API 版本 2 今天 当我登录注册另一个应用程序时 我注意到 Google API 控制台没有显示我以前注册的应
  • “download_slot”在 scrapy 中如何工作

    我在 scrapy 中创建了一个脚本来解析author name来自其着陆页的不同帖子 然后将其传递到parse page方法使用meta关键字以打印post content随着author name同时 我用过下载槽在元关键字中 据称该关