Как соскрести отзывы с Google Maps?

В этом посте мы научимся скрапировать Отзывы Google Maps.

Требования:

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

  1. Node JS
  2. Unirest JS
  3. Cheerio JS

Итак, прежде чем начать, мы должны убедиться, что настроили наш проект Node JS и установили оба пакета — Unirest JS и Cheerio JS. Вы можете установить оба пакета по указанной выше ссылке.

Мы будем использовать Unirest JS для извлечения необработанных HTML-данных, а Cheerio JS — для разбора извлеченных HTML-данных.

Цель:

Эйфелева башня Результаты Google Maps


Наша цель — собрать отзывы пользователей об Эйфелевой башне.

Процесс:

Итак, мы подготовили все необходимое для подготовки нашего скрепера. Мы будем использовать npm-библиотеку Unirest JS, чтобы сделать get-запрос к нашему целевому URL, чтобы мы могли получить наши необработанные HTML-данные. Затем мы будем использовать Cheerio JS для разбора извлеченных необработанных HTML-данных.

Мы будем ориентироваться на этот тип URL:

`https://www.google.com/async/reviewDialog?hl=en_us&async=feature_id:${data_ID},next_page_token:${next_page_token},sort_by:qualityScore,start_index:,associated_topic:,_fmt:pc`
Войти в полноэкранный режим Выйти из полноэкранного режима

Где,

различные значения sort_by:

Теперь возникает вопрос, как нам получить идентификатор данных какого-либо места?

https://www.google.com/maps/place/Eiffel+Tower/@48.8583701,2.2922926,17z/data=!4m7!3m6!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8583701!4d2.2944813!9m1!1b1
Войти в полноэкранный режим Выход из полноэкранного режима

Вы видите, что в URL часть после !4m7!3m6!1s и перед !8m2! является нашим ID данных.
Итак, наш идентификатор данных в данном случае 0x47e66e2964e34e2d:0x8ddca9ee380ef7e0.
Наш целевой URL должен выглядеть следующим образом:

https://www.google.com/async/reviewDialog?hl=en_us&async=feature_id:0x47e66e2964e34e2d:0x8ddca9ee380ef7e0,next_page_token:,sort_by:qualityScore,start_index:,associated_topic:,_fmt:pc
Вход в полноэкранный режим Выйти из полноэкранного режима

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

Сначала мы разберем информацию о местоположении заведения, которая содержит — название заведения, адрес, средний рейтинг и общее количество отзывов.

Из изображения выше видно, что тег для названия нашего места .P5Bobd, тег для адреса .T6pBCe, тег для среднего рейтинга span.Aq14fc и тег для общего количества отзывов span.z5jxId.

С информацией о местоположении закончили, теперь перейдем к разбору Data ID и next_page_token.

Найдите тег .lcorif. На изображении выше вы можете найти тег .lcorif во второй строке. Под этим тегом находится наш тег для Data ID как .loris и для next_page_token как .gws-localreviews__general-reviews-block.

Теперь выполним поиск тегов, содержащих данные о пользователе и его отзыве.
Найдите тег .gws-localreviews__google-review.

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

const unirest = require("unirest");
const cheerio = require("cheerio");

const getReviewsData = () => {
  return unirest
    .get("https://www.google.com/async/reviewDialog?hl=en_us&async=feature_id:0x47e66e2964e34e2d:0x8ddca9ee380ef7e0,next_page_token:,sort_by:qualityScore,start_index:,associated_topic:,_fmt:pc")
    .headers({
      "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36",
    })
    .then((response) => {
      console.log(response.body)
      let $ = cheerio.load(response.body);

      let user = [] , location_info,data_id,token;

      $(".lcorif").each((i, el) => {
        data_id = $(".loris").attr("data-fid");
        token = $(".gws-localreviews__general-reviews-block").attr(
          "data-next-page-token"
        );
        location_info = {
          title: $(".P5Bobd").text(),
          address: $(".T6pBCe").text(),
          avgRating: $("span.Aq14fc").text(),
          totalReviews: $("span.z5jxId").text(),
        };
      });

      $(".gws-localreviews__google-review").each((i, el) => {
        user.push({
        name:$(el).find(".TSUbDb").text(),

        link:$(el).find(".TSUbDb a").attr("href"),

        thumbnail: $(el).find(".lDY1rd").attr("src"),

        numOfreviews:$(el).find(".Msppse").text(),

        rating:$(el).find(".EBe2gf").attr("aria-label"),

        review:$(el).find(".Jtu6Td").text(),

        images:$(el)
          .find(".EDblX .JrO5Xe")
          .toArray()
          .map($)
          .map(d => d.attr("style").substring(21 , d.attr("style").lastIndexOf(")")))
        })
    });
    console.log("LOCATION INFO: ")
    console.log(location_info)
    console.log("DATA ID:")
    console.log(data_id)
    console.log("TOKEN:");
    console.log(token)
    console.log("USER:")
    console.log(user)
    });
};

getReviewsData();
Вход в полноэкранный режим Выход из полноэкранного режима

Результат:

Наш результат должен выглядеть следующим образом 👆🏻.
Это результаты первых десяти просмотров. Если вы хотите получить еще 10, введите токен, который мы нашли в нашем коде, в следующий URL:

https://www.google.com/async/reviewDialog?hl=en_us&async=feature_id:0x47e66e2964e34e2d:0x8ddca9ee380ef7e0,next_page_token:tokenFromResponse,sort_by:qualityScore,start_index:,associated_topic:,_fmt:pc
Войти в полноэкранный режим Выйти из полноэкранного режима

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

С помощью Google Maps Reviews API:

Serpdog | Google Search API предлагает вам 100 бесплатных запросов при регистрации.
Иногда скрапинг может занять много времени, но уже готовые структурированные JSON-данные могут сэкономить вам много времени.

const axios = require('axios');

axios.get('https://api.serpdog.com/reviews?api_key=APIKEY&data_id=0x89c25090129c363d:0x40c6a5770d25022b')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.log(error);
  });
Вход в полноэкранный режим Выйдите из полноэкранного режима

Результат:

Заключение:

В этом уроке мы узнали, как соскребать отзывы с Google Maps. Не стесняйтесь спрашивать меня о чем-либо в комментариях. Следите за мной в Twitter Спасибо, что читаете!

Дополнительные ресурсы:

  1. Как соскрести результаты органического поиска Google с помощью Node JS?
  2. Как скрести результаты новостей Google?
  3. Скрап результатов Google Images
  4. Скрап результатов автозаполнения предложений Google

Автор:

Меня зовут Даршан и я основатель serpdog.io.

Оцените статью
devanswers.ru
Добавить комментарий