Seo

Парсинг сложного сайта – заказ с биржи фриланса

Я занимаюсь парсингом данных долгое время, в том числе и на кворк.ру (популярная биржа фриланса) с различных сайтов – сбор нужных элементов со страниц заданного клиентом проекта и сохранение их в таблицу или базу MYSQL. Например, стандартным заданием для меня является сбор таких данных как заголовок, описание товара или страницы, ключевые слова, теги и т.п.
Могу с уверенностью сказать, что чем популярнее становится сайт, тем сложнее взять из этого проекта необходимые данные, т.к. люди понимают что информация – это деньги, и они не готовы ей делиться бесплатно! Как раз к таким и относится следующий сайт – agroserver.
Парсинг сложного сайта - заказ с биржи фриланса

В чем заключается сложность парсинга?

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

К ним относятся:

  • Поддержка прокси, в том числе бесплатных;
  • Удобное форматирование тегов и других текстовых значений через встроенный инструмент регулярных выражений;
  • Рандомизация и прямые запросы get, post к серверу и много других полезных фишек.

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

  • После нескольких подряд запросов с одного ip-адреса возникала ошибка 503 или капча;
  • Нужно было использовать и менять прокси очень часто, что, конечно, не делает скорости скрипту и вам как исполнителю задания;
  • Клиенту почему-то было принципиально взять для каждого объявления категорию, данные о которой не входили в общую выдачу списка, а следовательно и так осложняло без того непростую задачу.
  • Обязательным условием стало и наличие именно Excel формата для таблицы вместо CSV, что заняло также немало времени и нервов.

Примечание: обычно я делаю парсинг в этот формат (CSV), т.к. он удобен для последующей правки и состоит из обычного текста с нужными разделителями. С форматом для Microsoft Office, и программы Excel в частности, возникают иногда сложности при импорте данных, так как формат поддерживает табуляцию, и следовательно не всегда правильно распознается приложениями.
Парсинг сложного сайта - заказ с биржи фриланса

Решение задач и скорость парсинга

Итак, мы подошли к моменту, когда нужно было решать огромное количество разных задач и ускорять процесс сбора информации с сайта в разы.
Первым делом я сделал сбор списков с объявлениями, чтобы упростить решение и затем уже отдельно брать из этого списка нужные адреса (тем более, что в этих каталогах уже содержались нужные мне данные).
Далее последовал процесс установки прокси при возникновении ошибок и блокировки сайта, а также исправление мелких недочётов и тестирование скрипта.
Нужно отметить великолепное решение для быстрого парсинга у ZennoPoster, которое позволяет запускать один и тот же скрипт в многопоточном режиме – такой подход делает задачу намного быстрее и легче.
После сбора списков и тестирования скрипта на мелкие ошибки следует нахождение категорий в самих товарах – именно этот процесс и занял бОльшую часть времени работы над всем заказом, т.к. приходилось заходить в каждый товар и брать название и ссылку на рубрику.

Еще немного сложностей от клиента

Далее идет интересный момент: клиенту требуется не положить как это делается стандартными средствами каждое объявление в одну строку, а нужно внедрять именно в 1 строку ВСЕ объявления одного производителя. Не могу сказать для чего делается таким образом, но этот “геморрой” необходимо было как-то внедрять в работающий скрипт.
Поступил я следующим образом: сделал выборку из объявлений одной компании и просто добавлял их списком обычным способом по одному в строке, а затем уже отдельно складывал воедино все данные в 1 строку. Таким образом я убил двух зайцев – не мучился с сортировкой огромного количества данных, и быстро решил задачу.

Объединение всех файлов в один в нужный формат

Теперь нужно объединить все объявления в 1 файл, где будут представлены все производители по 1 строке каждый. Эта задача оказалась также нетривиальной, т.к. изначально парсинг осуществлялся в формат CSV, а клиенту нужен был обязательно Excel.
Дело в том, что CSV формат – это простой текст с разделителями, а XLSX – это набор данных из текста, чисел, табуляции и всего прочего. В следствие чего мне для решения этой задачи потребовалось полностью переформатировать каждый файл, а это, между прочим, несколько тысяч отдельных документов.
Итак, справиться с ней мне помог опять тот же продукт – ZennoPoster! Он позволяет сохранять и в том, и в другом формате, но для перевода из одного в другой нет стандартного решения, т.к. оно по умолчанию не предусмотрено.
Пришлось писать ещё один дополнительный скрипт, где я уже полностью изменил формат выдачи, а также узнал параллельно о том, что можно при помощи .bat файла одним кликом соединить все имеющиеся CSV документы.
Парсинг сложного сайта - заказ с биржи фриланса

Итоги парсинга сайта

Мы подошли к выводам, сделанным во время парсинга данных, и вот что я вижу:

  • Во-первых, я приобрел новый опыт сбора информации и соединения воедино одного типа формата файлов;
  • Я научился работать во многопоточном режиме и решать задачи нетривиальным способом;
  • Скорость решений увеличилась во много раз благодаря логичной структуре и постановке задач.

Следующим этапом будет ещё более быстрый парсинг при помощи обработки JSON формата данных, о котором я расскажу чуть позже…

Pin It