gpt4 book ai didi

python - 如何在一定数量的请求后停止 scrapy 蜘蛛?

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

我正在开发一个简单的抓取工具来获取 9 个搞笑帖子及其图片,但由于一些技术困难,我无法停止抓取工具,它继续抓取,这是我不想要的。我想增加计数器值并在 100 个帖子后停止。但是 9gag 页面的设计方式是在每次响应中只提供 10 个帖子,并且在每次迭代后我的计数器值重置为 10,在这种情况下我的循环运行无限长并且永不停止。


# -*- coding: utf-8 -*-
import scrapy
from _9gag.items import GagItem

class FirstSpider(scrapy.Spider):
name = "first"
allowed_domains = ["9gag.com"]
start_urls = (
'http://www.9gag.com/',
)

last_gag_id = None
def parse(self, response):
count = 0
for article in response.xpath('//article'):
gag_id = article.xpath('@data-entry-id').extract()
count +=1
if gag_id:
if (count != 100):
last_gag_id = gag_id[0]
ninegag_item = GagItem()
ninegag_item['entry_id'] = gag_id[0]
ninegag_item['url'] = article.xpath('@data-entry-url').extract()[0]
ninegag_item['votes'] = article.xpath('@data-entry-votes').extract()[0]
ninegag_item['comments'] = article.xpath('@data-entry-comments').extract()[0]
ninegag_item['title'] = article.xpath('.//h2/a/text()').extract()[0].strip()
ninegag_item['img_url'] = article.xpath('.//div[1]/a/img/@src').extract()

yield ninegag_item


else:
break


next_url = 'http://9gag.com/?id=%s&c=200' % last_gag_id
yield scrapy.Request(url=next_url, callback=self.parse)
print count

items.py 的代码在这里

from scrapy.item import Item, Field


class GagItem(Item):
entry_id = Field()
url = Field()
votes = Field()
comments = Field()
title = Field()
img_url = Field()

所以我想增加一个全局计数值并尝试通过将 3 个参数传递给解析函数它给出错误

TypeError: parse() takes exactly 3 arguments (2 given)

那么有没有办法传递一个全局计数值并在每次迭代后返回它并在 100 个帖子后停止(假设)。

此处提供整个项目 Github即使我设置 POST_LIMIT =100 也会发生无限循环,请参阅此处我执行的命令

scrapy crawl first -s POST_LIMIT=10 --output=output.json

最佳答案

有一个内置设置 CLOSESPIDER_PAGECOUNT 可以通过命令行传递 -s参数或设置更改:scrapy crawl <spider> -s CLOSESPIDER_PAGECOUNT=100

一个小警告是,如果您启用了缓存,它也会将缓存命中数计为页面数。

关于python - 如何在一定数量的请求后停止 scrapy 蜘蛛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35748061/

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