在scrapy中调用多个回调函数

时间:2018-12-26 20:40:53

标签: python scrapy

我正在使用scrapy,但有几个问题:

第一个问题:我将start_requests放在了一个循环中,但是该函数不是从每次迭代开始的

第二个问题:我需要调用与循环给定的start_urls相关的其他回调,但是我无法为该回调提供动态名称。我想放置callback = parse_i,我来自上面的循环。

liste [[liste1],[liste2],[liste3]]

for i in range (0, 2):
    start_urls = liste[i]

    def start_requests(self):
        #print(self.start_urls)
        for u in self.start_urls:
            try:
                req = requests.get(u)
            except requests.exceptions.ConnectionError:
                print("Connection refused")
            if req.status_code != 200:

                print("Request failed, status code is :", req.status_code)
                continue
            yield scrapy.Request(u, callback=self.parse, meta={'dont_merge_cookies': True}, dont_filter=False)

谢谢

1 个答案:

答案 0 :(得分:0)

  

我需要调用与循环给出的start_urls相关的其他回调,但是我无法为该回调提供动态名称。我想将callback=parse_ii放在上面的循环中。

回调属性只需是可调用的,因此您可以像平常一样使用getattr

my_callback = getattr(self, 'parse_{}'.format(i))
yield Request(u, callback=my_callback)

另外,虽然您没有问这个问题,但从start_requests进行URL调用是非常不寻常的,因为(a)这就是为什么人们会使用Scrapy来处理所有非(b)使用requests进行200个操作将不会影响希望影响抓取工作的任何节流,代理,用户代理,恢复或其他旋钮。