вызвать несколько функций обратного вызова в скрапе - PullRequest
0 голосов
/ 26 декабря 2018

Я использую 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 голосов
/ 27 декабря 2018

Мне нужно вызвать другой обратный вызов, связанный с start_urls, данным циклом, но я не могу дать динамическое имя для обратного вызова.Я хотел бы поставить callback=parse_i и i из вышеприведенного цикла.

Атрибут обратного вызова просто должен вызываться, поэтому вы можете использовать getattr, как обычно:

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

Отдельно, хотя вы не спрашивали об этом, весьма необычно совершать URL-вызов изнутри start_requests, поскольку (а) именно поэтому для начала нужно использовать Scrapy, чтобы разобратьсясо всеми этими вещами, не относящимися к 200, и (b) выполнение с requests не учитывает какие-либо из дросселирующих, прокси-серверов, пользовательских агентов, возобновления или множества других ручек, над которыми можно было бы повлиять на работу по очистке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...