Pull to refresh

Comments 45

А скажите, с помощью папетира получается хорошо прикидываться настоящим человеком с браузером? Ну там user agent правильный выдаётся и прочее?

User agent можно указать любой желаемый.
да, имитация браузера, только в Headless режиме

Из коробки не получится пркидываться человеком, потому что любой WAF уровня выше среднего-школьного детектит безголовость на раз, и юзер-агент это дело стопятидесятое, не 2004й же на дворе.

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

Интересно. А на что намекаете? Что надо обычный браузер и через chromedriver управлять/использовать расширения? Или что расковырять апи, и прямымм запросами к данным по хардкору? Или ещё что-то?

Может в комментарии ошибка? Не наибольшего, а как раз наименьшего сопротивления? Современные страницы активно JS используют и построить парсер на базе headless выходит дешево по скорости реализации и последующего поддержвания, но дорого по скорости работы и потребляемым ресурсам.

Так и не понял где тут у них путь наибольшего соправтивления. Можешь расскрыть?

В плане простоты исполнения — наименьшее. В плане ресурсоемкости и скорости работы — наибольшее. Но как уже отписал ниже автор поста существующее решение покрыло его потребности

можно я вместо bungu отвечу?:
algotrader2013 проще вообще без браузера. любой ЯП, провильные заголовки + прокси — это то, чего хватит в 99%
alekciy, Kubig всё правильно написано. если страница на JS, то проще json расковырять, чем браузеры городить

Не все сайты работают через получение JSON данных с бека по AJAX. При этом очень часто на эти endpoint ставят разного рода проверки которые требуют передачи разного рода токенов которые создаются в рантайме в процессе работы JS. И тут как раз связка webdriver + XPath с исполнением через headless дает очень быстрый результат в плане запуска парсинга. И не нужно ни какой json при это расковыривать. Но цена за короткое время запуска работы парсера — высокие накладные расходы в виде браузера. А уже потом, когда ясно, что нужна либо быстрая скорость обхода либо экономия ресурсов, уже потом можно и в json поковыряться. Вплоть до того, что исполнять JS источника в VM (SpiderMonkey/V8), получать токены и слать запросы уже через curl.

я с вами полностью согласен — иногда приходиться заморачиваться. но в большинстве случаев можно обойтись просто python/requests :)
А json'ы откуда беруться?

Если сайт сделан с поддержкой RESTApi то приходящие/уходящие запросы можно просто посмотреть через панель разработчика в Chrome. В противном случае необходимо парсить непосредственно html код через XPATH или CSS-селекторы

А много таких сайтов (субъективно)? Я просто не особо на это внимание обращал.

Хватает. Да и есть явная тенденция с усилением защиты.

Совершенно согласен. Даже в самой статье было упоминание, что в масштабном и постоянном использовании лучше пойти другими способами и инструментами. Но для нас Puppeteer как раз и был Наименьшим сопротивлением.
Ведь тут была разовая задача. И скорость выполнения и потребление ресурсов были небольшие. По сути это поднять один экземпляр браузера и в течении нескольких часов просмотреть все страницы за год. Даже при нескольких экземплярах браузера это не будет «атакой»

Наименьшее сопротивление, в таком случае, бангладешец за 100 баксов. Соберет все руками за месяц. Скорость выполнения и потребление ресурсов соответствующие. И даже при нескольких экземплярах не будет атаки. Ждем статью.

Хотел бы я посмотреть как бангладешец за 100 уе собирает файлы по 6к-10к строк :) И причем далеко не одну штуку и далеко не с одной колонкой)) Жду референса на подобного экземпляра!
эмуляция работы реальных пользователя на UI без риска попасть в бан, как потенциальные DDOS атаки

Не вводите в заблуждение. Бан, UI и DDoS тут совершенно не связаны между собой. Бан можно получить при парсинге на любой клиенте (curl/guzzle/headless) и это зависит от схемы противодействия на ресурсе-источнике. Можно и при использовании клиента-парсера с UI попасть в бан если на источнике отслеживают движение мыши, а вы у себя этого не предусмотрели.


А DDoS предполагает парсинг с большого количества хостов. При этом в целом какой при этом клиент-парсер (GUI / CLI) не важно.


Так же не понятно, за счет чего повышается эффективность парсинга через Puppeteer при ограничении сетевых вызовов. В смысле, не грузить картинки? Но тогда стоило бы указать, каким образом это делается.

Согласен. Тоже не совсем понял причём тут DDoS. Можно притвориться браузером и скачивать страничку за страничкой, а можно так же притвориться браузером, скачивать страничку за страничкой в 100500 потоков и тогда конечно риск что сервер выдаст бан возрастает.
Интересно как запустить puppeteer в 100500 потоков) У нас было куча проектов с использованием Selenium ( что в целом весьма подобное решение как Puppeteer ) и вот даже 50 потоков, ну это прям супер крутая и долгосрочная автоматизация с очень серьезной инфраструктурой.
Но замечание дельное, как я понимаю смысл один и тот же. И с браузером и без браузера можно попасть в бан. Просто без браузера делать много потоков значительно проще и в разы менее ресурсозатратно, поэтому риск попасть в бан в разы повышается
На что вообще надо обращать внимание кроме UA и таймаутов, прикидываясь человеком?

Мышь. Поведенческие факторы.

Интересно как запустить puppeteer в 100500 потоков)

Несколько экземпляров же. И обвязочный код который по ним раскидывает задания. Этакий кластер.

Солидный такой кластер. Не знаю делал ли кто либо до этого подобные вещи

За puppeteer не скажу. Я когда активно пилил парсеры его по сути небыло. Но вот на базе PhantomJS делал кластер и в принципе это не очень сложно. Просто через cli запускаешь пачку PhantomJS с прослушкой каждый на своем порту по webdriver протоколу. Проблема возникла ровно одна — он не мог слушать на заданном IP и запускался небезопасно, чем тут же пользовались взломщики. Поэтому вопрос решался на уровне iptables.

а какой был порядок цифр инстансов PhantomJs браузера в кластере?

Что-то около 50, но то было ограничение по железу. Схема легко масштабирцуется на порядки. При расчете за исходные данные берем, что один инстанс ~500-700 Мб резидентной ОЗУ с пиком до 1Гб, потекщие инстансы тушим при 2Гб ОЗУ, время на полную обработку одного запроса на парсинг 5-60 секунд.
Да, что еще вспомнил. При запуске можно указать, какой прокси использовать. Поэтому в системе был автоматический перезапуск инстанса прокси которого забанили (управлять выбором используемой прокси по webdriver не удалось, поэтому фиксировалось статически в момент запуска).

Я с puppeteer не работал, только читал. Но первое что приходит в голову, это просто докеры.
Полноценный парсинг больших ресурсов возможен при использовании распределенных прокси на тысячи — миллионы уникальных ip-адресов. Хорошо себя зарекомендовал израильский Luminati.
Он хорош, но ну очень уж он дорог. Знакомый из фирмы, которая парсит на заказ в промышленных масштабах, говорил, что у них есть большая красная кнопка, при которой траф перенаправляется через Luminati (ее жмут, когда побанили все, что можно, и надо спасать жопу, ведь можно лишиться контракта с клиентом, ибо себестоимость парсинга в таком случае выходит дороже конечной стоимости услуг).

Также как-то я сам просчитывал стоимость одного проекта с парсингом динамического контента в реальном времени. И выходило, что со стоимостью в $10/GB+ это тоже убивало всю экономику.

Может, разве что, если исключительно прямыми АПИ запросами кидать, то может быть выгодно, — хз
А какие есть аналоги Luminati?

А чем хорош? Чем он так отличается/выделяется от прочих площадок продающих прокси?

Не знаю, как сейчас, а года 3 назад прикол был в том, что много хомячков поставило себе бесплатное расширение Hola. Прям ну очень много хомячков. И они давали возможность через них ходить в инет. Поэтому, прикол был в том, что можно ходить через ip адреса реальных людей. Конкуренты, в основном, продавали датацентровые прокси, которые условным максмайндом палятся.

Сейчас, вроде, уже есть провайдеры резидентных и мобильных прокси, но тоже хз, насколько с базой пользователей холы могут потягаться

Есть такие, называются — сюрприз — Люминати.


На самом деле, белый айпишник в чистом виде уже давно не панацея. Поэтому, кстати, те же Люминати дропнули ценник на резидентные прокси и теперь их любимая игрушка эмуляция браузеров. Резидентные прокси сейчас рулят для другого, типа как выяснить, насколько цена на амазоне для правильного пацана из Кремниевой долины отличается от цены для правильного пацана из Детройта. Ну или что там за рекламку нам покажет Фейсбук через веризон в Коннектикуте.

Люминаты раздают шаред-прокси по 50 центов за гигабайт. Дальше — умение их готовить. Современные WAFы это давно уже не "у вас подозрительный ASIN, давайте играть в рекапчу". То есть такое тоже есть, конечно, но от этого отходят, потому что тупо.

Пардон, не ASIN, а ASN конечно, с амазоном переигрался.

"у вас подозрительный ASN"

Хорошая фича для любого ML, разве нет?

Скрейпинг — давняя тема, и сам даже занимался ей когда-то, и заказов на апворке на эту тему немало видел. А как обстоят дела с анти-скрейпингом? Каждый сайт/приложение свой колхоз городит или есть какие-то популярные решения против скрейпинга?
А нет каких-то готовых решений для анти-скрейпинга? Просто странно в век автоматизации, что каждый сам себе велосипед изобретает и одинаковые шишки набивает.

Есть. API называется. В последние годы, вижу, что многие стали лучше осознавать, что парсинг не остановить и это процесс который обходится для авторов парсера очень дешево. Сильно дешевле, чем оборонные меры. Поэтому приходилось слышать от коллег, что сайт источник задетектив бота подсовываем ему большую надпись "у нас есть API, оно тут!" и просьбу для получения данных использовать его. Но все истории пока про запад.

Sign up to leave a comment.

Articles