Можно ли заменить Scrapy на pyspider?

Я использую Scrapy фреймворк web-scraping довольно широко, но недавно я обнаружил, что есть еще одна фреймворк / система, называемая pyspider, который, согласно его странице github, является новым, активно развитым и популярным.

pyspider На домашней странице перечислено несколько вещей, которые поддерживаются "из коробки":

  • Мощный веб-интерфейс с редактором сценариев, монитором задач, менеджером проектов и средством просмотра результатов

  • Javascript страницы поддерживаются!

  • Приоритет задачи, повтор, периодика и повторное сканирование по возрасту или отметкам на странице индекса (например, время обновления)

  • Распределенная архитектура

Это те вещи, которые Scrapy сам не обеспечивает, но, это возможно с помощью portia (для веб-интерфейса), scrapyjs (для страниц js) и scrapyd (развертывание и распространение через API).

Это правда, что pyspider один может заменить все эти инструменты? Другими словами, это pyspider прямая альтернатива Scrapy? Если нет, то какие случаи использования он охватывает?

Я надеюсь, что я не пересекаю "слишком широкую" или "основанную на мнении" линию.

1 ответ

Решение

Pyspider и Scrapy имеют одну и ту же цель - очистку веб-страниц, но разные взгляды на это.

  • паук никогда не должен останавливаться, пока WWW не умер. (информация меняется, данные обновляются на веб-сайтах, паук должен иметь возможность и ответственность за очистку последних данных. Вот почему у pyspider есть база данных URL, мощный планировщик, @every, age, так далее..)

  • pyspider - это сервис больше, чем фреймворк. (Компоненты работают в изолированном процессе, Lite - all версия также работает как служба, вам не нужно иметь среду Python, но есть браузер, все, что касается извлечения или расписания, контролируется скриптом через API, а не параметрами запуска или глобальными настройками, ресурсы / проекты управляются pyspider и т. д...)

  • Pyspider - это система пауков. (Любые компоненты могут быть заменены, даже разработаны на C/C++/Java или любом языке, для лучшей производительности или большей емкости)

а также

  • on_start против start_url
  • контроль трафика токенов download_delay
  • return json против class Item
  • очередь сообщений против Pipeline
  • встроенная база данных URL set
  • Постоянство против In-memory
  • PyQuery + любой третий пакет, который вам нравится, против встроенной поддержки CSS/Xpath

На самом деле, я не очень много говорил о Scrapy. Писпидер действительно отличается от Scrapy.

Но почему бы не попробовать это самостоятельно? pyspider также быстр, имеет простой в использовании API, и вы можете попробовать его без установки.

Поскольку я использую как scrapy, так и pyspider, я хотел бы предложить следующее:

Если сайт действительно маленький / простой, сначала попробуйте pyspider, так как на нем есть почти все, что вам нужно.

  • Используйте webui для настройки проекта
  • Попробуйте онлайн-редактор кода и мгновенно просмотрите результат синтаксического анализа
  • Легко просматривать результат в браузере
  • Запустить / приостановить проект
  • Установите дату истечения срока, чтобы он мог повторно обработать URL

Однако, если вы попробовали pyspider и обнаружили, что он не соответствует вашим потребностям, пришло время использовать scrapy. - перенести on_start в start_request - перенести index_page для синтаксического анализа - перенести detail_age в detail_age - изменить self.crawl на response.follow

Тогда вы почти закончили. Теперь вы можете поиграть с расширенными функциями scrapy, такими как промежуточное ПО, элементы, конвейер и т. Д.

Другие вопросы по тегам