Scrapy发送多个请求

w6lpcovy  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(145)

我正在编写一段代码,它必须随时从远程Json文件中读取和处理日期和时间信息。

import scrapy

class TimeSpider(scrapy.Spider):
    name = 'getTime'
    allowed_domains = ['worldtimeapi.org']
    start_urls = ['http://worldtimeapi.org']

    def parse(self,response):
        time_json='http://worldtimeapi.org/api/timezone/Asia/Tehran'
        for i in range(5):
            print(i)
            yield scrapy.Request(url=time_json, callback=self.parse_json)

    def parse_json(self,response):
        print(response.json())

它的输出如下:

0
1
2
3
4
{'abbreviation': '+0430', 'client_ip': '45.136.231.43', 'datetime': '2022-04-22T22:01:44.198723+04:30', 'day_of_week': 5, 'day_of_year': 112, 'dst': True, 'dst_from': '2022-03-21T20:30:00+00:00', 'dst_offset': 3600, 'dst_until': '2022-09-21T19:30:00+00:00', 'raw_offset': 12600, 'timezone': 'Asia/Tehran', 'unixtime': 1650648704, 'utc_datetime': '2022-04-22T17:31:44.198723+00:00', 'utc_offset': '+04:30', 'week_number': 16}

正如您所看到的,程序只调用parse_json函数一次,而它必须在每个循环中调用该函数
谁能帮我解决这个问题?

kqqjbcuj

kqqjbcuj1#

其他请求被scrapy的默认重复过滤器丢弃。
避免这种情况的最简单方法是传递dont_filter参数:

yield scrapy.Request(url=time_json, callback=self.parse_json, dont_filter=True)

从文档中:

dont_filterbool)-表示排程器不应筛选此要求。当您想要多次执行相同的要求时,可以使用此选项来忽略重复的筛选条件。请小心使用,否则会陷入探索循环。预设为False

相关问题