В этом посте мы научимся скрапировать Отзывы Google Maps.
Требования:
Прежде чем мы начнем, мы должны установить все, что нам может понадобиться в этом руководстве, чтобы двигаться дальше.
- Node JS
- Unirest JS
- 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 Спасибо, что читаете!
Дополнительные ресурсы:
- Как соскрести результаты органического поиска Google с помощью Node JS?
- Как скрести результаты новостей Google?
- Скрап результатов Google Images
- Скрап результатов автозаполнения предложений Google
Автор:
Меня зовут Даршан и я основатель serpdog.io.