Неофициальное руководство по извлечению результатов поиска Google в 2021 году с помощью Elixir.
Table Of Content
В одной из предыдущих статей мы обсудили, почему кто-то может захотеть извлекать данные из Интернета. Кроме того, я создал небольшую статью, в которой показано, как извлекать данные для агентства недвижимости; Теперь мы сделаем небольшой шаг в немного другом направлении - наша новая цель - Google.
Представьте, что мы - маркетинговое агентство, пытаемся работать для компании и продвигать ее в результатах поиска Google. В этой ситуации важно отслеживать результаты маркетинговых мероприятий, чтобы понять, как различные маркетинговые активности влияют на позиции клиентов в результатах поиска.
Примечание: Согласно файлу robots.txt, доступному на google.com, обычно не рекомендуется сканировать результаты поиска. Однако мы также видим, что есть некоторые исключения для некоторых ботов (например, Twitter и т. д.). Быстрый поиск по запросу "как сканировать Google" показывает десятки подобных учебников, но для других языков, так почему бы не показать один для Elixir?
Задача
В этом примере мы создадим веб-скрейпер, который будет извлекать:
Начало работы
Как обычно в таких случаях, мы начнем с создания нового проекта Crawly:
mix new google_serp --sup
Добавьте Crawly и Floki в файл mix:
defp deps() do
[
{:crawly, "~> 0.12.0"},
{:floki, "~> 0.26.0"}
]
end
Создайте папку config и файл config.exs
Ориентирование
Как только все настроено, мы можем взглянуть на целевой веб-сайт, чтобы найти селекторы.
Давайте получим страницу с результатами поиска и посмотрим, как ее извлечь:
Интересная часть здесь заключается в том, что тело представлено в кодировке ISO-8859–1. Поэтому нам придется сначала преобразовать его в UTF8, чтобы было легче продолжить разбор, см. также обсуждение здесь. Мы будем использовать Codepagex для этой цели.
Теперь пришло время открыть страницу с помощью консоли Google Inspect (идеально с отключенным JS), чтобы начать поиск правильных селекторов.
Как видно из картинки выше, возможно получить доступ ко всем блокам с помощью **.ZINbbc
**(также потребуется удалить первый элемент этого списка, который не кажется относящимся к результатам поиска). Мы пришли к следующим селекторам:
Теперь, наконец, пришло время преобразовать это в паука. Идеально было бы получить поисковый запрос в качестве начального параметра для паука, поэтому давайте это сделаем :).
Мы пришли к следующему коду:
Вы можете клонировать получившийся проект здесь.
Вывод
В этой статье мы показали, как извлекать данные из результатов поиска Google. Это немного неполный пример, так как мы пока не следуем постраничной навигации. Если эта статья наберет 200 лайков, я создам вторую статью, объясняющую, как переходить на все страницы результатов поиска Google.
ОБНОВЛЕНИЕ
Поскольку мы собрали необходимые 200 лайков, я готовлю вторую часть статьи! Пожалуйста, оставайтесь на связи!