Комментарии 90
А еще будьте готовы арендовать несколько разных пакетов прокси на разных сервисах, когда столкнетесь с тем, что сайты, которые вы скрэпите начали включать защитные алгоритмы против любителей регулярного автоматического копирования их контента.
Всегда можно попробовать использовать сеть TOR как пул бесплатных прокси! https://github.com/mattes/rotating-proxy
Обычно как раз против таких публичных прокси защита есть из коробки. Например, в AWS WAF она включается парой нажатий.
И, как показала практика, это почти весь вредоносный трафик отсекает.
Именно этот вариант не пробовал. Честно говоря не очень верю в эффективность подобных средств, исходники которых правились в репозитории пять лет назад.
Я пробовал разного рода списки дешевых прокси за $10 в месяц три пачки. Неудачный опыт. Много ошибок обработки запросов, масса мертвых адресов, масса обрывов соединений. Нервотрепка в общем.
Субъективно, из того что я использовал, адекватные прокси услуги обычно стоят от $90-$100 долларов в месяц. Что называется "включил и забыл". Единственное за чем надо следить, это за остатком кредитов на балансе, которые списываются по мере пользования сервисом.
Сложность с прокси начинается тогда, когда ты хочешь их использовать для Headless Browsers. Если ты подключил сервис, который биллит за каждый запрос, например https://www.zyte.com/smart-proxy-manager/, то будь готов открыть для себя очевидное:
Современные сайты делают ДЕСЯТКИ запросов в момент открытия страницы. А значит, тебя будут биллить за каждую картиночку, за каждый рекламный баннер, за каждый web analytics event. Есть решение использовать ad blocker chrome extension, чтобы грузить только то, что надо.
И тут начинается гонка вооружений.
Нет такой проблемы. Есть сервисы с API, которые за дополнительную плату сами рендерят результирующую страницу со всеми яваскриптами и отдают тебе в готовом виде. При этом стоимость обычного запроса скажем 1 кредит, а стоимость запроса с рендерингом 5 кредитов. В общем вполне выгодное предложение, потому что действительно загрузка одной страницы способна сгенерировать сотню дополнительных запросов.
-Есть сервисы с API, которые за дополнительную плату сами рендерят результирующую страницу
Можно пару ссылок?
Хм, расчет от количества запросов.
Выходит дорого, если парсить, например, WB.
Пользуюсь https://brightdata.com, расчет от объема. Думал у вас лучше )
Сложность начинается, когда тебе, чтобы увидеть результат парсинга при жизни, надо парсить хотя бы несколько сотен тысяч страниц в день, а защита от парсинга начинает тебя блокировать уже после нескольких десятков штук оных.
Есть одна государственная, к слову говоря, база данных (уточняю, чтобы закрыть вопрос о этичности её парсинга, а юридических вопросов даже не буду касаться, там вообще мрак с этим), которую очень много кто на рынке хотел бы спарсить целиком и использовать для разумного, доброго, вечного... Однако ж ни у кого не получилось.
Около 50 миллионов документов (PDF) + несколько миллионов страниц со ссылками на оные - и буземно параноидальная защита, от которой живые-то пользователи страдают. Плюс всякие фокусы типа webassembly, игнорирование которого увеличивает степень паранойи на порядок.
Ну там крайне специфическая ситуация, когда на государственной базе в качестве оператора оной сидит коммерческая организация, которая сама на эксклюзивном доступе к ней из своих коммерческих продуктов в основном и зарабатывает. Причём ответственный за базу госорган с этим ничего сделать не может. В общем, смешная история, но тут не хочу вдаваться в подробности. Так что ничего не слито, а стоимость договорённости с оператором базы измеряется не сотнями баксов, а как минимум сотнями тысяч их же. После чего тебе придётся конкурировать с построенными на этих данных коммерческими продуктами самогó оператора базы, который этих денег никому не платил.
Через пулы прокси получается скачивать ту информацию, которая нужна в конкретных случаях. Но полный доступ к базе открыл бы качественно другие возможности для аналитики.
Насчёт Толоки идея, к слову, неплохая, спасибо. Надо только прикинуть возможную скорость и стоимость. Сомнения в основном насчёт скорости. Ну и какой-нибудь инструмент для автоматизации нелёгкого труда толокеров на коленке создать. Подумаю на досуге.
Про толоку - в точку! Иногда дешевле запрячь индусов руками собирать данные с вебсайта. Более того, это 100% легально, так как запрещают часто именно автоматизированный сбор данных.
Насчет индусов не знаю, но недавно делал приятелю парсер некоторых данных с букинг кома. Грабим селениумом всю страничку (делаем просто скриншот всей страницы), передаем в олламу для парсинга и анализа, и на выходе получаем json, который закидываем в базу данных. Для сверки на всякий случай туда же сохраняется скриншот. Сделать не сложно, работает конечно не в промышленных масштабах, но для моего приятеля было более чем достаточно. Для промышленных масштабов, все упирается в железо в основном. Если есть бюджет, то почему бы и нет.
куча прокси с разными IP, ну и не качать много страниц с одного сайта подряд
Мне кажется, для поискового движка честнее один чистый IP, соблюдающий robots.txt, говорить «я поисковый бот» и делать запросы к разным сайтам по очереди, там чтобы между каждым запросом к одному сайту проходило много времени.
Насколько я понимаю, у поисковых краулеров есть волшебный user-agent, который пропускают всякие защиты. Как влететь в эту VIP тусовку не знаю. Можно попробовать прикинуться гугловым краулером, мб получится.
Пакеты прокси - это для начинающих) Когда идет серьезная работа, то может спокойно пыхтеть ферма из десяток мобилок)
Пакет мобильных прокси точно так же легко арендуется, так что это не более чем вопрос личных предпочтений и бюджета. У меня нет никакого желания строить фермы из мобилок, я предпочитаю специализироваться в разработке. Эксплуатация резидентных прокси ферм меня вообще никак не торкает. Это совершенно отдельный бизнес на мой взгляд.
paputee как понимаю сейчас топ 1 ?
Если вы про puppeteer, то я не думаю, что есть top-1 of Headless browsers.
По умолчанию, все такие браузеры обвешаны метками "я автоматизированный браузер", которые часто легко детектируются анти-парсинг системами. Есть крякнутые Chromedrivers, в которых эти дыры убрали, например, вот: https://github.com/ultrafunkamsterdam/undetected-chromedriver
Puppeteer нынче никто не носит. Сейчас набирает популярность playwright. Он в активной разработке, функционально богаче чем pouppeteer, есть поддержка python и java от разработчика. Поддержка разных браузеров, не удалось сходить хромом, сходили Firefox.
У меня почти год уже как puppeteer основной рабочий инструмент скрэпинга и ни разу меня не забанили за `автоматизированность браузера`. Почти всегда банят за один и тот же IP источника исходящих запросов с высоким рейтом в единицу времени.
и ни разу меня не забанили за
Существует «серый бан», когда боту выдают только кешированную информацию или даже неправильные данные причем не всегда, а с определенной частотой. В этом случае, вы даже часто не поймете, что забанены.
Эх... Любил lxml, пока не встретил в первый раз на mir-kubikov.ru - расшифровка на лету. Только headless браузер из простых решений, а хотелось лишь получить табличку для вывода "наиболее выгодный набор лего по соотношению цены за кубик" :))
var ipp = {decrypt:function() {var decrypt = new JSEncrypt(); decrypt.setPrivateKey("MIIkKQIBAAKCCAEArbPJ2
Да, это взять и начать парсить HTML разметку страницы. То есть, например, из
<a href="https://okhlopkov.com">Cool website</a>
достать ссылку. Это можно делать как простыми регулярными выражениями, так и через более умные инструменты (в питоне это BeautifulSoup4 и Scrapy) и фильтры (XPath, CSS-selectors).
Можно и регулярками, но до поры - до времени.
Бывают сайты, где стоят сложные системы обнаружения ботов/fingerprint и выдающие сложные капчи практически с первого же запроса, бывают сайты специально изменяющие html разметку или наоборот почти полностью ее убирающие. Или скажем хитро генерирующие страницу из html, так чтобы бот путался (то есть в html будет много div друг за другом, которые потом превратятся в большую таблицу, но без полноценного рейдинга сложно понять какой div в какое месте таблицу окажется). В ряде случаев дешевле всего прикрутить OCR и полноценную генерацию скриншота страницы.
Да, чудищ много на пути война.
Но кажется, что если юзер смог через свой браузер что-то открыть, то и скрипт сможет. Конечно же, стандартные хромдрайверы легко палятся. Поэтому придумали undetected chromedrivers, я кидал ссылку в соседнем комментарии.
юзер смог через свой браузер что-то открыть, то и скрипт сможет.
Проблема не только открыть, но и получить данные.
Скажем в html может быть
<div>name2</div><div>test12</div><div>test11</div><div>test22</div><div>name1</div><div>test21</div>
которые в браузере превратятся в
name1 | name2
-----------------
test11 | test12
-----------------
test21 | test22
Но просто получить эту таблицу без полноценного рейдинга — сложно
Опять-таки ряд сайтов (бронирования гостиниц, авиабилетов и т.п.) может выдавать мусор (устаревшие или вообще неправильные данные), если считает, что их парсит бот (причем рандомно). В результате, можно все спарсить, успокоиться, а потом окажется, что результат ничего не стоит.
Но кажется, что если юзер смог через свой браузер что-то открыть, то и скрипт сможет
Ага, особенно когда контент доступен только авторизованному пользователю, а авторизация только через смс на номер телефона. Можно использовать виртуальные номера с получением смс через апи, только не всегда это окупается. А ещё капчу к этому прибавить…
В тиктоке нет статей ?♂️
Спасибо за актуальную информацию!
В моем личном списке автоматизация браузера стоит на самом последнем месте, когда ничего остальное не работает, или если надо что-то разово спарсить и лень заморачиваться анализом запросов. Потому что на задачах, подразумевающих частое и масштабное обновление собираемых данных, уже всплывает такая вещь, как потребление ресурсов простым скриптом и целым (пусть даже headless) браузером. Грубо говоря - тратишь день и потом гоняешь свой код на самом дешевом VPS или тратишь пару часов и твоя ферма браузеров уже просит что-то более дорогое чтобы работать.
За ссылку на Selenoid спасибо, любопытно. Когда я последний раз пробовал через автоматизацию браузера что-то делать, то новой фишкой в этом направлении был puppeteer xD
Да, онбординг в Headless browsers не очень. Но с remote Selenium grid / cluster жизнь становится сильно проще. Один раз настроив, я теперь всегда рендерю HTML даже перед извлечением JSON из страницы - все-таки при выполнении всего положенного JS, я убежден, сильно снижается вероятность попасть в бан.
Обычно если на сайте используется какая-то хитрая защита - она довольно быстро даёт о себе знать. Последний раз я использовал автоматизацию браузеров для сбора данных при работе с сайтами типа linkedin и instagram, всё остальное что мне попадалось - работало через обычные запросы + прокси. Хотя у меня может быть выборка нерелевантная, я последний год почти не занимаюсь подобным сбором данных, да и когда занимался активней - то тут еще была доля азарта, смогу ли я запросами эмулировать всё что нужно или всё-таки не выёживаться и просто запустить хромиум))
Как мне кажется, эта проблема с каждым годом будет все менее актуальна. Особенно, когда сделают быстрый и дешевый спутниковый интернет.
Во-первых, запросы/ответы более «чистые».
Во-вторых, нередко защита или отсутствует или минимальна.
Для парсинга форумов есть смысл проверять так же на подключение к tapatalk, благо многие подключены.
Боль современного парсинга - это cloudflare и его hcaptcha по любому чиху. Решается только тонкой подгонкой комбинации заголовков, прокси и бубна. И то не всегда.
Я конечно извиняюсь, а что мешает у себя на компьютере сгенерировать пачку IPv6 адресов и с них парсить? По идее все они будут разными для сервера, который парсят. Насколько мне известно, нет четких критериев, что какой-то диапазон адресов принадлежит одному компьютеру.
Не знал про такой способ, спасибо. Поизучаю, как работает IPv6 и, возможно, попробую их использовать.
нет четких критериев, что какой-то диапазон адресов принадлежит одному компьютеру/64?
Очень хотелось бы понять мнение минусующих, а именно, вас не устраивает этический или технический аспект парсинга через IPv6? Также, приветствуется обоснование.
Поделитесь опытом,кто нибудь пробовал парсить через распознование,например через оупен цв, интересен сам подход.Кто пробовал?
OCR всегда допускает ошибки, если в тексте описка полбеды, то в ценах или важных числовых данных иногда ошибка в 1% равносильна бесполезному набору данных.
Во-вторых, часто. важно положение текста на странице и из картинки это получить часто сложнее (условно на одной линии слева у вас меню сайта, справа реклама, посредине важный текст, а OCR выдаст все скопом и часто нетривиально правильно распарсить данные).
Для парсинга, насколько мне известно, обычно используется Tesseract:
https://github.com/tesseract-ocr/tesseract
Сам я правда пока не использовал, только присматривался.
Использовал его, чтобы доставать текст с мемов - работал очень плохо. На скринах вебсайтов не тестил.
Я тессерактом и капчи распознавал, чтобы логиниться хедлесс на некоторых сайтах для доступа к сервисам.
И для демонстрации клиентам, что их "защита" – говно, а предыдущие разработчики взяли деньги не доделав.
Проверка на хедлесс есть умная с проверками браузера на тру.
В любом случае обычно вариант обхода защиты персональный для сайта.
Если Flutter достигнет каких-нибудь высот, то и html не попарсить
Всё можно спарсить, что видит обычный браузер.
В курсе как работает flutter?
Спросить можно все, но сколько это займет ресурсов.
Для тех кто не знает как работает flutter, он выводит в картинку содержимое, парсинг представляет собой скрин картинки и распознавание ее. А вот как парсер будет делать скролы и свайпы это другой вопрос, так как скролы происходят внутри
Не знаю можно тут выкладывать, вот мой тестовый сайтик, попробуйте спарсить хоть что-нибудь releases.yourok.ru самому интересно
Это не картинка, а canvas с JS и WebGL API.
А на Вашем сайте вся инфа из json-файлов подтягивается. Скачать всё заняло минимально времени. Т.к. кроме этих файлов другого контента там нет, то вот список (парсим JSON и получаем готовый сайт):
https://releases.yourok.ru/releases/movies.json
https://releases.yourok.ru/releases/4k.json
https://releases.yourok.ru/releases/tv.json
https://releases.yourok.ru/releases/cartoons.json
https://releases.yourok.ru/releases/cartoons_tv.json
https://releases.yourok.ru/releases/legends.json
Будет время, могу сделать клона онлайн.
Еще никогда Штирлиц не был так близко к провалу
Будет ли интересно посмотреть сайт с которого невозможно "спарсить" контент, и каким либо образом вмешаться в работу самого сайта? Хотя для демонстрации мне придется восстанавливать свое демо, т.к. эта страница была ранее уже закрыта. Из интереса я мог бы это сделать, естественно в обмен на описание ваших попыток взлома:)
Для обновления html использую javascript и шифрование запросов, которое делает браузер. Тем не менее с помощью этого же браузера не удастся повторить эти действия и произвольно парсить сайт, впрочем как и с помощью С, или иных средств, и снифферов. Конечно Вы сможете вручную посмотреть код html и css, и вручную его и скопировать, но в копии не будет javascript, и потому парсить сайт в обычном понимании этого слова не получится, точно так же не получится и посылать запросы на сайт для получения осмысленных ответов, и уж тем более создать свой клон сайта. В интернете при желании можно найти также и известные способы, добавив которые будет невозможно даже вручную ни посмотреть ни скопировать готовый html из браузера, будет только визуальное отображение контента в обычном окне браузера, который скопировать можно лишь как картинку, с помощью PrintScreen и Ctr+v.
Как спарсить любой сайт?