使用R从TripAdvisor中抓取数据

使用R从TripAdvisor中抓取数据,r,xpath,rselenium,R,Xpath,Rselenium,我想创建一个爬虫程序,它将从Trip Advisor中获取一些数据。理想情况下,它会 (a)识别指向所有要爬网位置的链接, (b)收集每个地点所有景点的链接,并 (c)将收集所有评论的目的地名称、日期和评分。 现在我想集中讨论(a)部分 以下是我开始使用的网站: 这里有一个问题:该链接提供了前10个目的地,如果你点击“查看更多热门目的地”,它将扩展列表。似乎它使用javascript函数来实现这一点。不幸的是,我不熟悉javascript,但我认为下面的代码块可能会提供有关其工作原理的线索:

我想创建一个爬虫程序,它将从Trip Advisor中获取一些数据。理想情况下,它会 (a)识别指向所有要爬网位置的链接, (b)收集每个地点所有景点的链接,并 (c)将收集所有评论的目的地名称、日期和评分。 现在我想集中讨论(a)部分

以下是我开始使用的网站:

这里有一个问题:该链接提供了前10个目的地,如果你点击“查看更多热门目的地”,它将扩展列表。似乎它使用javascript函数来实现这一点。不幸的是,我不熟悉javascript,但我认为下面的代码块可能会提供有关其工作原理的线索:

<div class="morePopularCities" onclick="ta.call('ta.servlet.Tourism.showNextChildPage', event, this)">
<img id='lazyload_2067453571_25' height='27' width='27' src='http://e2.tacdn.com/img2/x.gif'/>
See more popular destinations in New Zealand </div>
最后一行应该在这里起作用,但我不确定我需要在这里调用什么函数

一旦我设法扩展此列表,我将能够以解决第(b)部分的相同方式获得每个目的地的链接,我想我已经解决了这个问题(对于感兴趣的人):

至于第(c)步,我发现了一些有用的链接,这些链接可能会对此有所帮助:

如果您有任何关于如何扩展顶级目的地列表或如何以更智能的方式完成其他步骤的建议,请告诉我,我非常希望收到您的来信


非常感谢

基本上,您可以尝试将单击事件发送到
。大概是这样的:

remDr$navigate(tu)
div <- remDr$findElement("class", "morePopularCities")
div$clickElement()

我的
R
不太流利,您可能会发现我的代码示例不漂亮,请随意建议。

谢谢@har07,效果非常好!但奇怪的是,有时候它什么都不做。不过这并不是什么大问题,因为我可以通过垃圾邮件发送该按钮,直到它消失(直到出现错误)。我注意到了另一个奇怪之处——例如,使用
remDr$findelelement(使用='xpath','//div[@class=“popularcies”]/a')
后跟
webElem$getElementAttribute(“text”)
,我只得到第一个条目。再说一次,这并不是什么大问题,因为我可以将xpath表达式修改为
'//div[@class=“popularCities”]/a[X]
其中X是我想要的数字,但是有更好的方法吗?非常感谢@de1pher try
remDr$findelelements(…)
(注意
findelelements
中的尾随“
s
)以获取多个元素,然后使用
for
循环从每个元素获取
文本
属性。不客气:)
library(rvest)
tu = "http://www.tripadvisor.co.nz/Tourism-g255104-New_Zealand-Vacations.html"
tu = html_session(tu)
tu %>% html_nodes(xpath='//div[@class="popularCities"]/a') %>% html_attr("href")
 [1] "/Tourism-g255122-Queenstown_Otago_Region_South_Island-Vacations.html"                      
 [2] "/Tourism-g255106-Auckland_North_Island-Vacations.html"                                     
 [3] "/Tourism-g255117-Blenheim_Marlborough_Region_South_Island-Vacations.html"                  
 [4] "/Tourism-g255111-Rotorua_Rotorua_District_Bay_of_Plenty_Region_North_Island-Vacations.html"
 [5] "/Tourism-g255678-Nelson_Nelson_Tasman_Region_South_Island-Vacations.html"                  
 [6] "/Tourism-g255113-Taupo_Taupo_District_Waikato_Region_North_Island-Vacations.html"          
 [7] "/Tourism-g255109-Napier_Hawke_s_Bay_Region_North_Island-Vacations.html"                    
 [8] "/Tourism-g612500-Wanaka_Otago_Region_South_Island-Vacations.html"                          
 [9] "/Tourism-g255679-Russell_Bay_of_Islands_Northland_Region_North_Island-Vacations.html"      
[10] "/Tourism-g255114-Tauranga_Bay_of_Plenty_Region_North_Island-Vacations.html"  
remDr$navigate(tu)
div <- remDr$findElement("class", "morePopularCities")
div$clickElement()
divs <- remDr$findElements("class", "morePopularCities")
while(length(divs )>0) {
  for(div in divs ){
    div$clickElement()
  }
  divs <- remDr$findElements("class", "morePopularCities")
}