Как создать веб-сканер на основе Scrapy, чтобы он работал вечно?
-
23-09-2019 - |
Вопрос
Я хочу создать веб-сканер на основе Scrapy для захвата новостных изображений с нескольких веб-сайтов новостных порталов.Я хочу, чтобы этот краулер был:
Беги вечно
Означает, что он будет периодически повторно посещать некоторые страницы портала для получения обновлений.
Наметьте приоритеты.
Присваивайте разные приоритеты разным типам URL-адресов.
Многопоточная выборка
Я прочитал документ Scrapy, но не нашел ничего, связанного с тем, что я перечислил (возможно, я недостаточно внимателен).Есть ли здесь кто - нибудь , кто знает , как это сделать ?или просто приведите какую-нибудь идею / пример по этому поводу.Спасибо!
Решение
Scrapy - это фреймворк для создания пауков на веб-сайтах, как таковой, он предназначен для поддержки ваших критериев, но он не будет готовиться для вас из коробки;вероятно, вам придется относительно ознакомиться с модулем для выполнения некоторых задач.
- Запуск навсегда зависит от вашего приложения, которое вызывает Scrapy.Ты рассказываешь пауки куда идти и когда туда идти.
- Расставление приоритетов - это работа Промежуточное программное обеспечение планировщика который вам нужно было бы создать и подключить к Scrapy.Документация по этому вопросу выглядит неоднородной, и я не просматривал код - в принципе, функция там есть.
- 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