gpt4 book ai didi

python - "download_slot"在 scrapy 中是如何工作的

转载 作者:太空狗 更新时间:2023-10-30 02:51:26 26 4
gpt4 key购买 nike

我在 scrapy 中创建了一个脚本来从它的登陆页面解析不同帖子的 author name,然后使用 meta 将它传递给 parse_page 方法 关键字,以便同时打印 post contentauthor name

我在 meta 关键字中使用了 download_slot,据称它掩盖了脚本运行得更快。虽然没有必要遵守我在这里尝试应用的逻辑,但我想坚持下去只是为了了解 download_slot 在任何脚本中的工作原理及其原因。我进行了很多搜索以了解有关 download_slot 的更多信息,但我最终找到了一些链接,例如 this one .

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()

上面的脚本运行完美。

My question: how download_slot works within scrapy?

最佳答案

让我们从 Scrapy architecture 开始.当您创建一个 scrapy.Request 时,Scrapy 引擎将请求传递给下载器以获取内容。下载器将传入的请求放入插槽中,您可以将其想象为独立的请求队列。然后轮询队列并处理每个单独的请求(下载内容)。

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

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

这个解释有点简化,但它应该让您了解正在发生的事情。你可以查看the code自己。

关于python - "download_slot"在 scrapy 中是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55860181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com