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

Эта информация или ресурсы/услуги обычно размещаются по назначенному адресу. Как только кто-либо запрашивает его, он будет отправлен клиенту с сервера хоста. Иногда ресурсы статичны (совсем не меняются) и находятся на сервере, иногда они выбрасываются из черных ящиков, где выполняется больше операций в зависимости от типа запросов и того, как хост хотел бы на них реагировать. Но это не является частью нашей заботы как пользователя. Что нас беспокоит, так это то, насколько быстро и эффективно могут быть выполнены наши запросы. Можем ли мы в любом случае автоматизировать наши запросы, изучив структуру URL-адресов или то, как сервер структурирует свои ресурсы/службы в файловой системе. Чтобы нам не нужно было вручную открывать браузер, искать домен, переходить по его ссылке, чтобы получить то, что мы хотим.

Вместо этого мы можем щелкнуть Enter, и все, что мы хотим увидеть, просто всплывет.

Здесь на помощь приходит веб-скрейпинг.

В этой статье в качестве примера используется yp.com.hk. По сути, на веб-сайте размещены контакты с общественностью МСП в Гонконге, он действует как поисковый шлюз для небольших компаний во всех отраслях, от страхования, караоке до уличного ресторана. Несмотря на то, что он содержит приличный размер ресурсов (более 100 000 компаний), он имеет простую структуру URL-адресов. Это отличная отправная точка для веб-скрейпинга. Давайте посмотрим на его URL:

#The base url goes to home page:
'http://www.yp.com.hk/'
#Then there is a primary categorisation of industries:
'http://www.yp.com.hk/Dining-Entertainment-Shopping-Travel-b/ch/'
'http://www.yp.com.hk/Food-Products-Restaurant-Equipment-b/ch/'
.
.
.

Как видите, для перехода на следующий уровень категоризации достаточно просто прикрепить /name_of_category/ плюс /ch/ на китайском языке или /en/ на английском языке в конце URL-адреса. Как только мы перейдем на следующий уровень, вы увидите дальнейшее разделение.

Просто нажмите на любую категорию, чтобы узнать, что URL имеет тот же формат иерархии:

http://www.yp.com.hk/Dining-Entertainment-Shopping-Travel-b/Catering-Services-Eateries/ch/

Это добавляет немного работы, потому что языковая опция /ch/ все еще находится в конце. Это означает, что мы должны удалить эти символы, получить новый href/поддомен, очистив страницу подкатегории, добавить новый href к исходному URL-адресу, прежде чем добавить параметр языка в конце. Но опять же это совсем не сложно, просто требует немного терпения при склейке.

Опять же, просто нажмите на любую подкатегорию:

Мы видим, как страница превращается в результат поиска:

http://www.yp.com.hk/Dining-Entertainment-Shopping-Travel-b/Catering-Services-Eateries/Karaoke/p1/ch/

В дополнение к последней подкатегории добавляется p1 для обозначения нумерации страниц. Мы не можем изменить количество компаний, отображаемых на одной странице (10), но мы можем просто изменить p1 на p2, p3… вплоть до pn, чтобы попасть на нужную страницу.

Давайте подытожим, что у нас есть.

По сути, с главной домашней страницы yp.com.hk нам дается, какие дополнительные пути доступны для перехода на один уровень вниз до уровня 1 (как показано в центре). страницы, или вы можете проверить его html-ответ). В каждой категории уровня 1 нам снова даются пути для перехода на уровень 2, с уровня 2 мы можем щелкнуть, а затем перейти к результату поиска.

На странице результатов поиска мы видим, что любая компания, которая появляется, на самом деле является ссылкой, выделенной синим цветом. у него есть свойство href=”/28388026/756178/ch/ , которое можно напрямую применить к базовому URL-адресу для формы http://yp.com.hk/28388026/756178/ch/ , которая ведет на информационную страницу компании.

Ну вот. С помощью двух-трех одноразовых операций очистки мы можем определить URL-адрес всех компаний и извлечь их информацию.

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

Наконец, в качестве подведения итогов:

Все, что мы делаем в браузере, можно запрограммировать. Но стоит ли на самом деле писать программу, чтобы получить то, что мы хотим, зависит от:

  1. Количество информации/данных, которые нам нужны.
  2. Частота обновления. Вам нужно обновлять информацию каждый день или раз в год?

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

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

Ура и счастливого ползания.