Comments 11
В Python-мире есть например Scrapy. А есть ли что-нибудь подобное для Node.js? Просто интересно.
Совсем подобного нет, насколько я знаю. Платформа ещё молодая, а такие фреймворки быстро не делаются. Можно, конечно, написать скрейпер в стиле Python, не использующий сильные стороны Node.js, но он будет хуже Scrapy. Пока есть несколько сырых проектов, которые рано массово рекомендовать. Одно время подавал надежды node-crawler, но его поддержка прекращена, а замены, которые его автор рекомендует, мягко говоря не очень хороши.
Некоторые скрейперы потихоньку пилят свои фреймворки и однажды у одного-двух из них получится что-то приличное. Так было и со Scrapy, и с Grab.
Ещё есть такой момент, что с каждым годом писать фреймворки для скрейпинга становится всё труднее. Появляется всё больше частных случаев, которые надо учитывать, причём одновременно. И требования у заказчиков всё экзотичнее. Может быть напишу ещё об этом всём поподробнее.
Многие отдают html в таблицах без классов и id…
Тут принцип простой: если скрипт на странице может распарсить ответ, пришедший на Ajax-запрос, то в принципе его распарсить можно. Если не DOM-парсером или XPath, так уж регулярками точно. Но иногда приходится подумать, да. Таблицы без классов и ID – это не так уж и сложно по сравнению с тем, что иногда встречается.
Я не останавливаюсь на теме парсинга слишком подробно только потому, что именно этот аспект скрейпинга описан очень подробно во множестве статей по всему вебу. От условного "парсинга для чайников" и до условного "вуду-магия профессионального парсинга". Остальные аспекты скрейпинга описаны далеко не так хорошо. Некоторые начинающие скрейперы даже не знают о существовании других аспектов. Иногда даже называют скрейпинг парсингом. Я стараюсь подобрать примеры с простым парсингом, чтобы сделать акцент на остальных моментах. Конечно, в реальной жизни попадаются сайты, которые парсить очень непросто, тут не поспоришь.
Автору на самом деле повезло, что нет никакой защиты аля cloudfront'овской. Они при подозрении что ты негодяй, предлагают капчу гугла разгадывать, и тут уже без вариантов.
- Текст таблички заполняют джаваскриптом не просто так, а из какого-то источника. На самом деле не важно как данные отображаются на сайте, важно в каком виде они приходят. Например, джаваскрипт может брать данные для таблицы из XML или JSON запрошенного по Ajax. Ну, или из массива в самом джаваскрипте. Это относительно простые случаи. Бывает и так, что данные приходят в зашифрованном виде. Или передаются по WS. Или ещё как-то по-сложному. Тут уж приходится думать, стоят ли эти данные такой возни.
- Капча ломается специальными сервисами. Они платные и не сто процентов угадывают, но они есть. Скрейпинг защищённого капчей сайта — типичный заказ на биржах фриланса.
- Адская защита — повод задуматься о легальности скрейпинга именно этого сайта. Но ломается любая защита. Без исключений. Как минимум реверс-инжинирингом скриптов сайта. Бывает так, что скрейпер, специализирующийся на таких сайтах, работает в команде с хакером.
- Один из самых действенных способов обхода защиты — написать владельцам сайта и попросить доступ к API или прямо готовые данные. Не всегда помогает, но чаще, чем можно предположить. А уж если не стесняться заплатить, то часто получается дешевле, чем нанимать хакера.
2. Конечно ломается, но не всеми, не всегда, дорого и долго. Я не по наслышке это знаю. Я же не зря указал, что капча гугловская. Её во первых не на каждом сервисе подбирают, во вторых цены и процент разгадываний другой. Не говоря уже о том, что в целом задача в разы сложнее выходит.
3. Это в любом случае занятие сомнительной легальности.
4. Вам повезло, если так бывало.
Web scraping на Node.js и проблемные сайты