2016-03-11 107 views
-1

我正在从tripadvisor的评语中获得日期。用xpath在Tripadvisor刮刮枣

我开始:

https://www.tripadvisor.es/Hotel_Review-g562819-d237083-Reviews-or150-Hotel_Riu_Don_Miguel-Playa_del_Ingles_Maspalomas_Gran_Canaria_Canary_Islands.html#REVIEWS

的日期有两种形式:一个正常的DD/MM/YYYY格式Opinión escrita el 21 mayo 2010和相对日期格式Opinión escrita hace 4 días

'正常格式'有一个名为类ratingDate

<span class="ratingDate">Opinión escrita el 25 octubre 2006</span> 

'相对格式'有两类ratingDaterelativeDate

<span title="6 marzo 2016" class="ratingDate relativeDate">Opinión escrita hace 4 días</span> 

我使用R和rvest打包报废日期。

url_hotel <- "https://www.tripadvisor.es/Hotel_Review-g562819-d237083-Reviews-or150-Hotel_Riu_Don_Miguel-Playa_del_Ingles_Maspalomas_Gran_Canaria_Canary_Islands.html#REVIEWS" 
html_hotel <- url_hotel %>% read_html() 

这是我的问题。当我尝试使用此代码

dates <- html_hotel %>% html_nodes(".ratingDate") 

报废日期我得到的“正常时间”只而不是其他人。

试图找到我达到here

dates <- html_hotel %>% html_nodes(xpath="//*[contains(concat(' ', normalize-space(@class), ' '), ' ratingDate ')]") 

din't工作的解决方案。我不断得到相同的结果。

Here有人试图从Tripadvisor获取相同的数据,但使用Python。无论他的回答工作

dates <- html_hotel %>% html_nodes(xpath='//div[@class="col2of2"]//span[@class="ratingDate relativeDate"/@title or @class="ratingDate"]') 

有什么办法,树立了一个很好的XPath什么的,让“相对日期”

在此先感谢。

+0

摘自我猜你需要其他的包:'日期< - html_nodes( “RATINGDATE。 ”) 错误UseMethod(“ xml_find_all”): 不适用方法将'xml_find_all'应用于类“character”的对象,并且...对于R DD/MM/YYYY不是“正常格式”假设你预计“正常”是默认的。 –

+0

@ 42感谢您的评论。你得到一个错误,因为代码错了。抱歉。是我的错。它已经被纠正了。 “正常格式”只是一个名称,指的是不是“相对日期”的日期。我可以得到这个“正常日期”并在R中使用它。问题是我无法得到“相对日期”。我猜想是坏的Xpath。 –

回答

0

这是我的猜测,但由于我们不共享区域设置,所以您的日期与拼写日期不同,代码在我的区域设置中提供了不适用,但请尝试此操作(根据我怀疑的正确日期格式针对所在地区:

dates %>% 
    html_attr("title") %>% 
    strptime("%d %B %Y") %>% 
    as.POSIXct() 

https://github.com/hadley/rvest/blob/master/demo/tripadvisor.R

+0

谢谢@ 42。波尔塔尔,我的解释并不清楚。该网站有10条评论。使用'日期< - html_hotel%>%html_nodes(“。ratingDate”)'我得到8个元素的列表,其中包含八个第一个日期,我可以将它们转换为一个POSIXECT对象'date%>%gsub(“Opiniónescrita el | \ n“,”“,。)%>%dmy()'。但是,这是问题,我无法得到最后两个日期。他们有'class =“ratingDate relativeDate”',我不能用'日期< - html_hotel%>%html_nodes(“。ratingDate”)'来取消它们。所以,我想知道html_node函数的参数如何取消这些日期。谢谢 –

+0

当我查看通过“查看源代码”工具发送给Chrome的页面时,只有8个项目的“ratingDate”级别,并且只有8个意见部分在可见页面上有日期)。两个意见反而说“Opiniónescrita hace 5días”。还有其他日期,但不包括那个班级。我使用'date2 < - html_hotel%>%html_nodes(“。date”)获得了另外9个节点,其中三个似乎是“意见日期”。 –

+0

此外,如果我要求网站提供美式英语翻译,我现在可以在来源以及何时使用您的代码搜索“.ratingDate”时看到10个ratingDate值。 –