“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 中如何工作 的相关文章

  • 为什么我不能导入 geopandas?

    我唯一的代码行是 import geopandas 它给了我错误 OSError Could not find libspatialindex c library file 以前有人遇到过这个吗 我的脚本运行得很好 直到出现此错误 请注意
  • 在 Python 中使用 XPath 和 LXML

    我有一个 python 脚本 用于解析 XML 并将某些感兴趣的元素导出到 csv 文件中 我现在尝试更改脚本以允许根据条件过滤 XML 文件 等效的 XPath 查询将是 DC Events Confirmation contains T
  • 获取单个方程的脚本

    在文本文件中输入 a 2 8 b 3 9 c 4 8 d 5 9 e a b f c d g 0 6 h 1 7 i e g j f h output i j 期望的输出 输出 2 8 3 9 0 6 4 8 5 9 1 7 如果输入文件名
  • 如何将条目中的部分文本加粗并更改其背景颜色?

    我正在创建一个基于 Tkinter 的 GUI 它有一个 Entry 小部件 我想将其文本的一部分加粗并更改其背景颜色 但我不知道我该怎么做 如果我使用文本小部件 我可以只使用标签 但看起来它们不能与条目小部件一起使用 此代码使用文本小部件
  • 在 python-docx 中搜索和替换

    我有一个包含以下字符串的文档 模板 你好 我的名字是鲍勃 鲍勃是一个很好的名字 我想使用 python docx 打开此文档并使用 查找和替换 方法 如果存在 来更改每个字符串 Bob gt Mark 最后 我想生成一个新文档 其中包含字符
  • Python:当前目录是否自动包含在路径中?

    Python 3 4 通过阅读其他一些 SO 问题 似乎如果moduleName py文件位于当前目录之外 如果要导入它 必须将其添加到路径中sys path insert 0 path to application app folder
  • 如何在 Windows 上使用 Python 3.6 来安装 Python 2.7

    我想问一下如何使用pip install对于 Python 2 7 当我之前安装并使用 Python 3 6 时 我现在必须使用 Windows 上的 Python 版本 pip install 继续安装 Python 3 6 我需要使用以
  • 行为:如何从另一个文件导入步骤?

    我刚刚开始使用behave http pythonhosted org behave 一个Pythonic BDD框架 使用小黄瓜语法 http docs behat org guides 1 gherkin html 行为需要一个特征 例
  • 反加入熊猫

    我有两个表 我想附加它们 以便仅保留表 A 中的所有数据 并且仅在其键唯一时添加表 B 中的数据 键值在表 A 和 B 中是唯一的 但在某些情况下键将出现在表 A 和 B 中 我认为执行此操作的方法将涉及某种过滤联接 反联接 以获取表 B
  • Pandas:根据列名进行列的成对乘法

    我有以下数据框 gt gt gt df pd DataFrame ap1 X 1 2 3 4 as1 X 1 2 3 4 ap2 X 2 2 2 2 as2 X 3 3 3 3 gt gt gt df ap1 X as1 X ap2 X a
  • Python 中的这种赋值方式叫什么? a = b = 真

    我知道关于元组拆包 http docs python org tutorial datastructures html tuples and sequences但是当一行中有多个等号时 这个赋值被称为什么 阿拉a b True 它总是让我有
  • 字典的嵌套列表

    我正在尝试创建dict通过嵌套list groups Group1 A B Group2 C D L y x 0 for y in x if y x 0 for x in groups d k v for d in L for k v in
  • urllib2.urlopen() 是否实际获取页面?

    当我使用 urllib2 urlopen 时 我在考虑它只是为了读取标题还是实际上带回整个网页 IE 是否真的通过 urlopen 调用或 read 调用获取 HTML 页面 handle urllib2 urlopen url html
  • WindowsError:[错误 5] 访问被拒绝

    我一直在尝试终止一个进程 但我的所有选项都给出了 Windows 访问被拒绝错误 我通过以下方式打开进程 一个python脚本 test subprocess Popen sys executable testsc py 我想杀死那个进程
  • 使用 lambda 函数更改属性值

    我可以使用 lambda 函数循环遍历类对象列表并更改属性值 对于所有对象或满足特定条件的对象 吗 class Student object def init self name age self name name self age ag
  • Plotly:如何避免巨大的 html 文件大小

    我有一个 3D 装箱模型 它使用绘图来绘制输出图 我注意到 绘制了 600 个项目 生成 html 文件需要很长时间 文件大小为 89M 这太疯狂了 我怀疑可能存在一些巨大的重复 或者是由单个项目的 add trace 方法引起的 阴谋 为
  • Python模块单元测试的最佳文件结构组织?

    遗憾的是 我发现有太多方法可以在 Python 中保存单元测试 而且它们通常没有很好的文档记录 我正在寻找一种 终极 结构 它可以满足以下大部分要求 be discoverable by test frameworks including
  • Scrapy 蜘蛛无法工作

    由于到目前为止没有任何效果 我开始了一个新项目 python scrapy ctl py startproject Nu 我完全按照教程操作 创建了文件夹和一个新的蜘蛛 from scrapy contrib spiders import
  • Pandas 在特定列将数据帧拆分为两个数据帧

    I have pandas我组成的 DataFrameconcat 一行由 96 个值组成 我想将 DataFrame 从值 72 中分离出来 这样 一行的前 72 个值存储在 Dataframe1 中 接下来的 24 个值存储在 Data
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i

随机推荐

  • 如何修复此 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同时 我用过下载槽在元关键字中 据称该关