Pull to refresh

Comments 11

В Python-мире есть например Scrapy. А есть ли что-нибудь подобное для Node.js? Просто интересно.

Совсем подобного нет, насколько я знаю. Платформа ещё молодая, а такие фреймворки быстро не делаются. Можно, конечно, написать скрейпер в стиле Python, не использующий сильные стороны Node.js, но он будет хуже Scrapy. Пока есть несколько сырых проектов, которые рано массово рекомендовать. Одно время подавал надежды node-crawler, но его поддержка прекращена, а замены, которые его автор рекомендует, мягко говоря не очень хороши.


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


Ещё есть такой момент, что с каждым годом писать фреймворки для скрейпинга становится всё труднее. Появляется всё больше частных случаев, которые надо учитывать, причём одновременно. И требования у заказчиков всё экзотичнее. Может быть напишу ещё об этом всём поподробнее.

horseman.js — достаточно популярное решение для ноды. Но это далеко не аналог Scrapy.

horseman – это просто способ запускать PhantomJS из ноды.


PhantomJS, как и все остальные headless-браузеры, отличается от Scrapy тем, что не просто читает/парсит http-ответы и формирует http-запросы, а выполняет скрипты с сайта. Другой принцип. Свои плюсы, свои минусы.

Ха! Select/option -> xml это Вам несказано повезло.
Многие отдают html в таблицах без классов и id…

Тут принцип простой: если скрипт на странице может распарсить ответ, пришедший на Ajax-запрос, то в принципе его распарсить можно. Если не DOM-парсером или XPath, так уж регулярками точно. Но иногда приходится подумать, да. Таблицы без классов и ID – это не так уж и сложно по сравнению с тем, что иногда встречается.


Я не останавливаюсь на теме парсинга слишком подробно только потому, что именно этот аспект скрейпинга описан очень подробно во множестве статей по всему вебу. От условного "парсинга для чайников" и до условного "вуду-магия профессионального парсинга". Остальные аспекты скрейпинга описаны далеко не так хорошо. Некоторые начинающие скрейперы даже не знают о существовании других аспектов. Иногда даже называют скрейпинг парсингом. Я стараюсь подобрать примеры с простым парсингом, чтобы сделать акцент на остальных моментах. Конечно, в реальной жизни попадаются сайты, которые парсить очень непросто, тут не поспоришь.

И текст таблички заполняют джаваскриптом… Какого только изврата не придумывают, лишь бы не дать данные собрать с сайта. :)
Автору на самом деле повезло, что нет никакой защиты аля cloudfront'овской. Они при подозрении что ты негодяй, предлагают капчу гугла разгадывать, и тут уже без вариантов.
  1. Текст таблички заполняют джаваскриптом не просто так, а из какого-то источника. На самом деле не важно как данные отображаются на сайте, важно в каком виде они приходят. Например, джаваскрипт может брать данные для таблицы из XML или JSON запрошенного по Ajax. Ну, или из массива в самом джаваскрипте. Это относительно простые случаи. Бывает и так, что данные приходят в зашифрованном виде. Или передаются по WS. Или ещё как-то по-сложному. Тут уж приходится думать, стоят ли эти данные такой возни.
  2. Капча ломается специальными сервисами. Они платные и не сто процентов угадывают, но они есть. Скрейпинг защищённого капчей сайта — типичный заказ на биржах фриланса.
  3. Адская защита — повод задуматься о легальности скрейпинга именно этого сайта. Но ломается любая защита. Без исключений. Как минимум реверс-инжинирингом скриптов сайта. Бывает так, что скрейпер, специализирующийся на таких сайтах, работает в команде с хакером.
  4. Один из самых действенных способов обхода защиты — написать владельцам сайта и попросить доступ к API или прямо готовые данные. Не всегда помогает, но чаще, чем можно предположить. А уж если не стесняться заплатить, то часто получается дешевле, чем нанимать хакера.
1. Обфускация, и шифрование конечно же подразумевались.
2. Конечно ломается, но не всеми, не всегда, дорого и долго. Я не по наслышке это знаю. Я же не зря указал, что капча гугловская. Её во первых не на каждом сервисе подбирают, во вторых цены и процент разгадываний другой. Не говоря уже о том, что в целом задача в разы сложнее выходит.
3. Это в любом случае занятие сомнительной легальности.
4. Вам повезло, если так бывало.
  1. "Сложнее" тут стоит трактовать как "Дороже для заказчика". Кто-то откажется, кто-то заплатит за дополнительную возню.
  2. Ну, вы преувеличиваете. Далеко "не в любом случае". Пожалуй, это тема для отдельной статьи.
  3. О, да! :)

В предыдущем комменте пункты 2,3,4, конечно же. Чёртова разметка :)

Sign up to leave a comment.

Articles