元数据存储在第三方队列中,然后我的逻辑是在 start_requests() 中 while 从队列中循环获取数据,然后根据这些数据拼接 URL,再 yield, 伪代码如下:
def start_requests(self):
data = get_data_from_queue()
if len(data) > 0:
url = data 内数据拼接
yield scrapy.Request(url,其它参数)
最终的结果是队列数量和实际请求数量相差极大,比如我在队列中的消息数量为 1000,然后开启爬虫,等爬虫停止的时候,根据它的最后的日志信息发现请求队列中只入队了几十个。而队列中的消息已经消费完了。
我目前的想法是,是不是从第三方获取消息太快了,scrapy 这边 yield request 的时候没跟上,然后现在在调整单次从队列获取的数量大小?但是收效甚微,极端数量为 1 的时候,队列还没消费完,爬虫已经停止了。
我觉得这应该是很简单的问题,举个例子 for 循环这样 yield request 对于有规则的 url 也是常见的场景,但是受限于这方面知识面不足,我目前没有什么好的思路去尝试解决这个问题。
想问各位 v 友,我这个问题的关键在哪里,应该怎么解决。或者提供一个准确的关键词也是极好的,我就是没有准确的关键词,已经搜索很久了也没有搜到想要的。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.