Как создать веб-сканер на основе Scrapy, чтобы он работал вечно?

StackOverflow https://stackoverflow.com/questions/2350049

  •  23-09-2019
  •  | 
  •  

Вопрос

Я хочу создать веб-сканер на основе Scrapy для захвата новостных изображений с нескольких веб-сайтов новостных порталов.Я хочу, чтобы этот краулер был:

  1. Беги вечно

    Означает, что он будет периодически повторно посещать некоторые страницы портала для получения обновлений.

  2. Наметьте приоритеты.

    Присваивайте разные приоритеты разным типам URL-адресов.

  3. Многопоточная выборка

Я прочитал документ Scrapy, но не нашел ничего, связанного с тем, что я перечислил (возможно, я недостаточно внимателен).Есть ли здесь кто - нибудь , кто знает , как это сделать ?или просто приведите какую-нибудь идею / пример по этому поводу.Спасибо!

Это было полезно?

Решение

Scrapy - это фреймворк для создания пауков на веб-сайтах, как таковой, он предназначен для поддержки ваших критериев, но он не будет готовиться для вас из коробки;вероятно, вам придется относительно ознакомиться с модулем для выполнения некоторых задач.

  1. Запуск навсегда зависит от вашего приложения, которое вызывает Scrapy.Ты рассказываешь пауки куда идти и когда туда идти.
  2. Расставление приоритетов - это работа Промежуточное программное обеспечение планировщика который вам нужно было бы создать и подключить к Scrapy.Документация по этому вопросу выглядит неоднородной, и я не просматривал код - в принципе, функция там есть.
  3. Scrapy по своей сути, принципиально асинхронный что вполне может быть тем, чего вы желаете:запрос B может быть удовлетворен, пока запрос A все еще не выполнен.Базовый механизм подключения не мешает вам добросовестный многопоточность, но Scrapy не предоставляет услуги многопоточности.

Scrapy - это библиотека, а не приложение.Существует нетривиальный объем работы (кода), который необходимо выполнить пользователю модуля.

Другие советы

Что касается требования к постоянному запуску, вот некоторые подробности.

Вам нужно поймать signals.spider_idle сигнал, и в вашем методе, который подключен к сигналу, вам нужно поднять DontCloseSpider исключение.В spider_idle сигнал отправляется на движок scrapy, когда нет ожидающих запросов, и по умолчанию spider завершает работу.Вы можете перехватить этот процесс.

Смотрите , как взрываются коды:

import scrapy
from scrapy.exceptions import DontCloseSpider
from scrapy.xlib.pydispatch import dispatcher

class FooSpider(scrapy.Spider):
    def __init__(self, *args, **kwargs):
        super(FooSpider, self).__init__(*args, **kwargs)
        dispatcher.connect(self.spider_idle, signals.spider_idle)

    def spider_idle(self):
        #you can revisit your portal urls in this method
        raise DontCloseSpider 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top