使用 R 抓取谷歌地图的问题

问题描述 投票:0回答:1

我正在尝试通过在谷歌地图上抓取平均谷歌评论和地址来学习网络抓取。但是我有几个问题希望得到帮助:

  1. 缺少评论,使日期难以匹配

这家公司有6个网点。但只有 5 个有评论。

Google map

所以当我运行以下代码来提取出口名称和评级时,我得到了 6 个名称和 5 个评级数据。所以我无法将商店名称与收视率相匹配

Name result Rating result

问题是因为没有评论的出口没有我的代码可以使用的 aria-label 类。

Inspect element

我是否可以提取信息以使评分与评论相匹配?

pacman::p_load(rvest,
               xml2,
               RSelenium)

rmDr=rsDriver(browser = "firefox", port=4443L)$client
myclient= rmDr
myclient$navigate("https://www.google.com/maps/search/attea/@1.3586881,103.8165833,12z/data=!3m1!4b1")

html_obj <- myclient$getPageSource(header = TRUE)[[1]] %>% read_html()

names <- html_obj %>% html_elements(".hfpxzc")%>% 
  html_attr("aria-label") 

name_outlet<-as.data.frame(names)

stars_numrev <- html_obj %>% html_elements(".ZkP5Je")%>% 
  html_attr("aria-label") 

stars_numrev_outlet<-as.data.frame(stars_numrev)
  1. 我遇到的第二个问题是我也在尝试提取地址,但是如果没有 aria-label 和类,我又无法提取文本。

Element example

  1. 最后一个问题,如何让侧边栏滚动到底部?我不能使用 rselenium 发送按键。能不能模拟侧边栏的鼠标悬停和模拟鼠标滚动?

很抱歉问题列表很长。很长一段时间以来,我一直对抓取感兴趣,而且我主要从网络资源中学习。对有用指南的任何帮助或指示将不胜感激。干杯!

web-scraping rvest rselenium
1个回答
0
投票

对于您的示例,我可以使用以下方法提取地址:

html_obj %>% 
  html_node("div.RcCsl:nth-child(3) > button:nth-child(1) > div:nth-child(1) > div:nth-child(3) > div:nth-child(1)") %>%
  html_text()
[1] "2500 Chestnut Ave, Glenview, IL 60026"

我在几个不同的位置尝试过它,所以它似乎相当稳健。类名

.Io6YTe
对于不同的位置似乎也是相同的,因此它可能也可以用作 html 节点。在从页面中提取 html 之前,您可能需要添加一个等待页面加载的步骤。

我还在研究问题 3,如果我有任何发现,我会编辑这个答案。滚动到底部的最终目标是什么?也许有另一种方法可以达到这个目标?

© www.soinside.com 2019 - 2024. All rights reserved.