Самый простой способ запустить scraw crawler, чтобы он не блокировал скрипт

Официальные документы предоставляют множество способов запуска scrapy из кода:

 import scrapy from scrapy.crawler import CrawlerProcess class MySpider(scrapy.Spider): # Your spider definition ... process = CrawlerProcess({ 'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' }) process.crawl(MySpider) process.start() # the script will block here until the crawling is finished 

Но все они блокируют скрипт до завершения сканирования. Как проще всего запустить python для запуска искателя в неблокирующем, асинхронном режиме?

  • Scrapy: Каков правильный способ использования start_requests ()?
  • Перепишите URL-адреса для очистки перед отправкой запроса
  • Ошибка при запуске нового проекта
  • Почему мой второй запрос не вызван в методе parse моего scrapy spider
  • Почему мои правила Scraw CrawlSpider не работают?
  • Загрузка изображения Scrapy, как использовать пользовательское имя файла
  • Сканирование с завершенным сеансом в Scrapy
  • Использование Scrapy для поиска и загрузки pdf-файлов с веб-сайта
  • One Solution collect form web for “Самый простой способ запустить scraw crawler, чтобы он не блокировал скрипт”

    Я пробовал каждое решение, которое мог найти, и единственное, что работает для меня, это . Но чтобы заставить его работать с scrapy 1.1rc1 мне пришлось немного подстроить его:

     from scrapy.crawler import Crawler from scrapy import signals from scrapy.utils.project import get_project_settings from twisted.internet import reactor from billiard import Process class CrawlerScript(Process): def __init__(self, spider): Process.__init__(self) settings = get_project_settings() self.crawler = Crawler(spider.__class__, settings) self.crawler.signals.connect(reactor.stop, signal=signals.spider_closed) self.spider = spider def run(self): self.crawler.crawl(self.spider) reactor.run() def crawl_async(): spider = MySpider() crawler = CrawlerScript(spider) crawler.start() crawler.join() 

    Итак, теперь, когда я вызываю crawl_async , он начинает сканирование и не блокирует текущий поток. Я абсолютно новичок в scrapy , поэтому может быть, это не очень хорошее решение, но это сработало для меня.

    Я использовал эти версии библиотек:

     cffi==1.5.0 Scrapy==1.1rc1 Twisted==15.5.0 billiard==3.3.0.22 
    Python - лучший язык программирования в мире.