Есть ли способ отложить запрос на рекурсивное сканирование ссылок в Scrapy? - PullRequest
0 голосов
/ 06 мая 2019

Я соскребу news.crunchbase.com с помощью Scrapy.Функция обратного вызова для следующих рекурсивных ссылок не срабатывает в случае, если я перехожу по фактической ссылке, но работает нормально, если вместо этого я сканирую некоторую тестовую ссылку.Я предполагаю, что проблема во времени, поэтому хочу отложить рекурсивный запрос.

РЕДАКТИРОВАТЬ: ответ от здесь устанавливает глобальную задержку, но она не регулирует рекурсивную задержку.Рекурсивный обход ссылок выполняется мгновенно - сразу после очистки данных.

def parse(self, response):
    time.sleep(5)
    for post in response.css('div.herald-posts'):   
        article_url = post.css('div.herald-post-thumbnail a::attr(href)').get()

        if article_url is not None:
            print('\nGot article...', article_url, '\n')
            yield response.follow(article_url, headers = self.custom_headers, callback = self.parse_article)

        yield {
            'title': post.css('div.herald-post-thumbnail a::attr(title)').get(),
        }

1 Ответ

0 голосов
/ 07 мая 2019

На самом деле этого было достаточно.

custom_settings = {
   "DOWNLOAD_DELAY": 5,
   "CONCURRENT_REQUESTS_PER_DOMAIN": 1
}

Дочерние запросы помещаются в очередь запросов и обрабатываются после родительских запросов.В случае, если запросы не связаны с текущим доменом, DOWNLOAD_DELAY игнорируется и запрос выполняется мгновенно.

PS Я просто не дождался, пока start_requests (self) обработает весь список URL, поэтому подумал, что я былзапрещено.Надеюсь, это кому-нибудь поможет.

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