Лучший опыт

Успешные специалисты по па? ... Лучшие советы по практике и технике парсинга в 2023 году

Лучшие советы по практике и технике парсинга в 2023 году...

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

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

Распространенные проблемы при парсинге

Будучи специалистом по парсингу, вы должны знать, что существуют некоторые «подводные камни», с которыми вам придется столкнуться в процессе парсинга. Некоторые из них встречаются часто, другие — реже. Независимо от частоты возникновения, знать о них необходимо. Ниже рассматриваются наиболее распространенные из них.

Изменение HTML страницы

Я решил начать с этого пункта, поскольку в большинстве случаев он не имеет никакого отношения к попыткам сайта помешать парсингу. Однако это одна из самых популярных причин, по которой скрипты парсинга перестают работать. Большинство сайтов обычно через некоторое время меняют свою верстку, и когда это происходит, HTML должен измениться.

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

Ошибочный парсинг неправильных данных

Еще один распространенный подводный камень, с которым вы можете столкнуться как веб-парсер, — это отбор неправильных данных. Обычно этого не происходит, если вы парсите несколько страниц и можете быстро просмотреть спарсенные данные, и, таким образом, вы можете определить, есть ли проблема с какими-либо данными.

Однако если размер данных, которые необходимо спарсить, велик и вы не можете их перебрать, то необходимо подумать о целостности и качестве всех спарсенных данных. Это связано с тем, что часть данных может не соответствовать вашим требованиям к качеству. Для этого необходимо подвергнуть данные тестированию, прежде чем добавлять их в базу данных.

Методы борьбы с парсингом

Веб-сайты не хотят, чтобы их данные парсили, а если захотят, то предоставят вам API для этого. Большинство сложных веб-сайтов имеют системы защиты от спама, чтобы предотвратить доступ к их содержимому парсеров, краулеров и других автоматических ботов. Они включают в себя такие методы борьбы с краулерами, как отслеживание и запрет IP-адресов, ловушки honeypot, Captchas, Ajax-изация сайта, «отпечатки пальцев» браузера и многие другие. Как решить все эти проблемы, вы узнаете в следующем разделе.

Проблема парсинга в больших масштабах

Если вы новичок в области парсинга, то вам покажется, что спарсить сайт из 10 000 страниц — то же самое, что спарсить сайт из 2 млн. страниц. Однако чем больше данных вам нужно спарсить, тем больше осторожности и планирования вам потребуется. Как правило, необходимо знать, что чем больше данных нужно спарсить, тем больше времени это займет.

Обычно разработка парсера для одновременного поиска и распределение работы между разными компьютерами/серверами ускоряет процесс. Кроме того, система баз данных должна быть масштабируемой, быстрой, безопасной и надежной. В противном случае вы рискуете потерять много времени на запросы к базе данных. Amazon Web Services (AWS) — один из лучших вариантов на рынке.

Лучшие практики парсинга

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

Соблюдение файла Robots.txt на сайте

Большинство веб-сайтов имеют файл robots.txt, который используется для общения с автоматическими ботами, такими как краулеры и парсеры, по поводу того, какие страницы следует и какие не следует спарсить. Они также могут давать другие команды, такие как частота поползновений и время между запросами, среди прочего. Одна вещь, которую я обнаружил в большинстве парсеров, за исключением тех, которые принадлежат поисковым системам, заключается в том, что файлы robots.txt для веб-сайтов не соблюдаются — они полностью игнорируются. Более того, некоторые парсеры считают robots.txt устаревшим.

Тем не менее, учитывать robots.txt веб-сайта — одна из лучших практик. Обычно, даже если вы не хотите следовать правилам запрета, которые диктуют пути, по которым не следует ходить, вы можете, по крайней мере, соблюдать инструкцию о задержке ползания, чтобы быть помягче с веб-серверами. Вы можете узнать, как разобрать файл robots.txt на предпочитаемом вами языке программирования и фреймворке для парсинга. Для программистов на языке python это можно сделать с помощью модуля urllib.robotparser.

Подмена User-Agent и других HTTP-заголовков

Когда браузер отправляет запрос на веб-сервер, он передает такие данные, как User-Agent, представляющий собой строку, идентифицирующую браузер. Наряду с User-Agent передается и другая информация: Accept, Accept-Language, Accept-Encoding, Referrer и др. Парсеры также должны предоставлять эту информацию; некоторые сайты отказывают им в доступе. В настоящее время некоторые сайты автоматически блокируют определенные краулеры и парсеры, используя для их идентификации User-Agent.

Если вы не хотите, чтобы ваш бот был идентифицирован как парсер, необходимо подменить User-Agent, заменив его на User-Agent популярного браузера. Еще лучше, если есть возможность подменить User-Agent, но при этом необходимо следить за тем, чтобы сайт не представлял разные макеты для разных User-Agent; код сломается, если произойдет смена макета, которую вы не учли в своем коде. При использовании строки User-Agent популярного браузера необходимо убедиться, что другие HTTP-заголовки соответствуют ей. Не забудьте также указать значение заголовка referrer, чтобы он выглядел более естественно.

Работа с логинами и сессионными файлами cookie

Некоторые данные, которые могут вас заинтересовать, скрыты за страницей входа в систему. Когда вы сталкиваетесь с этим, вам просто необходимо тщательно спланировать работу, так как отслеживание ваших действий становится для сайта проще. Но как вообще выполнить вход в систему и сохранить сессионный файл cookie? Хотя это может показаться сложной задачей, на самом деле это несложно, если знать, что делать. Нужно просто создать сессию, затем послать запрос на URL входа в систему с данными аутентификации в качестве полезной нагрузки. После успешного выполнения запроса вы получите ответ с прикрепленными cookies сессии.

Вернув сессионный cookie, вы можете прикреплять его к каждому своему запросу, и вам не придется повторно входить в систему, поскольку сайты используют cookie для идентификации своих пользователей. Для того чтобы узнать URL-адрес входа в систему и названия входов формы, которые будут использоваться в качестве полезной нагрузки, необходимо проинспектировать форму в среде браузера, щелкнув правой кнопкой мыши и выбрав опцию Inspect element. Значением действия формы является URL-адрес входа в систему. Для полезной нагрузки необходимо проинспектировать элемент формы и извлечь из него правильное название поля имени пользователя и пароля — вместе с другим полем, если таковое имеется.

Работа со скрытыми (но обязательными) полями безопасности в POST-формах

Описанный выше способ входа в систему может не подойти для некоторых сайтов, которые имеют скрытые поля безопасности для предотвращения доступа хакеров и спамеров к своим сайтам. Это связано с тем, что если вы попытаетесь отправить только имя пользователя и пароль без данных для скрытого поля, запрос не будет успешным.

Помимо логина, многие POST-формы также имеют поля безопасности, такие как csrf_token, скрытые от обычных пользователей и автоматически заполняемые хэш-значением, которое невозможно воспроизвести. Чтобы получить данные для этого поля, необходимо создать сессию, посетить страницу и извлечь значение из этой скрытой страницы. После этого можно отправить запрос со значением скрытого поля в полезной нагрузке запроса.

Замедление запросов во избежание перегрузки сайта

Парсинг предполагает отправку большого количества запросов на сайты, которые вам не принадлежат. Это означает, что вы, естественно, увеличиваете расходы на поддержку сайта, не принося ему никакой пользы. Если вы не можете принести пользу сайту, который вы парсите, то постарайтесь быть вежливым, устанавливая задержку между запросами, чтобы не перегружать сервер сайта. Некоторые сайты даже указывают оптимальную задержку для краулеров и парсеров в файле robots.txt.

Даже если это не оговорено, то в соответствии с лучшими практиками и этическими нормами вы должны избегать слишком большого количества запросов к сайту за короткое время. Это необходимо для того, чтобы избежать замедления работы сайта. Также важно не парсить сайт ночью или рано утром, когда люди не активны — это гарантирует, что ваши действия не повлияют на других пользователей, сделав сайт медленным.

Распределять запросы по нескольким IP-адресам

По правде говоря, этот пункт даже не должен быть частью лучших практик, поскольку использование прокси при парсинге является обязательным. Каждый сайт имеет лимит запросов, который он разрешает с одного IP в течение определенного периода времени. Если IP пытается превысить этот лимит, то такой IP будет заблокирован на некоторое время. Поэтому, если вы хотите заниматься парсингом в разумных масштабах, то вам необходимо использовать прокси-серверы. С помощью прокси-серверов можно распределить запросы между несколькими IP-адресами и создать впечатление, что они попадают на сайт с разных устройств.

Для этого лучше всего использовать пул прокси-серверов. Это связано с тем, что они имеют много IP-адресов в своем пуле, и вам не нужно беспокоиться о ротации IP-адресов и заботе о плохих IP-адресах. Если говорить о типе прокси, то лучше всего для этого подходят прокси для жилых помещений. Однако для некоторых отдельных сайтов отлично подходят прокси для центров обработки данных.

Работа с недостающими HTML-тегами

Когда речь идет о парсинге, необходимо знать, что HTML-коду страниц нельзя доверять, и это неспроста — он то и дело изменяется. Поэтому важно всегда проверять наличие элемента, прежде чем пытаться манипулировать им или извлекать из него данные. При попытке извлечь данные из отсутствующего HTML-тега некоторые библиотеки синтаксического анализа возвращают значение None, а другие выбрасывают исключение.

Рекомендуется всегда использовать оператор if для проверки наличия тега, прежде чем пытаться работать с ним. А если элемент отсутствует, парсер должен зафиксировать это и уведомить вас, чтобы вы знали, что на странице что-то изменилось, и могли работать с ней.

Обработка сетевых ошибок

Вы пишете код для своего парсера и не думаете о сетевых ошибках, верно? Но, возможно, вам будет интересно узнать, что они часто случаются, гораздо чаще, чем вы думаете. Это может быть связано с проблемами на вашей стороне, с проблемами на веб-сервере, которому вы посылаете запросы, или с проблемами у вашего прокси-провайдера.

Главное правило — никогда не доверять тому, что сеть будет вести себя так, как вы ожидаете. Проблемы будут возникать, и поэтому следует писать код таким образом, чтобы учесть возможность сетевых ошибок и соответствующим образом их устранить. Убедитесь, что в каждой части вашего кода, где необходимо отправлять веб-запросы, предусмотрена обработка исключений, попробуйте:

requests.get(https://www.google.com)
except requests.exceptions.RequestException:
# код для обработки исключения здесь.

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

Парсинг кэша Google для получения данных, не чувствительных к времени

Время, которое вы пытаетесь спарсить, не чувствительно ко времени? Тогда лучше оставить сайт в покое и спарсивать его данные с помощью копий Google Cache. Возможно, вам будет интересно узнать, что большинство страниц, которые вы пытаетесь спарсить, уже были спарсены Google, и вы можете спарсить их непосредственно из Google Cache, особенно если вы имеете дело с историческими данными. Из Google Cache можно получить весь HTML-файл страницы, включая его, картинки и другие файлы.

Google — очень крупный сайт, и он может принять любое количество запросов, которое вы хотите отправить на его сервер в любое время суток, без какого-либо негативного влияния вашего парсера. Этого нельзя сказать о других сайтах, сервер которых может быть легко перегружен запросами. Даже Scrapy рекомендует парсерам собирать исторические данные из Google Cache, а не обращаться к веб-сайту напрямую.

Заключение

Парсинг — это серьезный бизнес, требующий тщательного планирования и тщательного исполнения, особенно если вы собираетесь заниматься им в разумных масштабах. При планировании необходимо учитывать некоторые ключевые передовые методы парсинга. Некоторые из них были рассмотрены выше.