2016-06-08 24 views
1

假设我想从本页面获得有关设施的信息(https://www.airbnb.com/rooms/6676364)。它只适用于可见部分。 但是如何从“+更多”按钮提取其余部分?r。如何从(“+更多”等)刮取数据。

我在xpathSApply的帮助下从“源代码”尝试了节点,但它返回“+更多”。 你知道这个问题的解决方案吗?

我RSelenium方法:

url <- "https://www.airbnb.com/rooms/12344760" 
library('RSelenium') 
pJS <- phantom() 
library('XML') 
shell.exec(paste0("C:\\Users\\Daniil\\Desktop\\R-language,Python\\file.bat")) 
Sys.sleep(10) 

checkForServer() 
startServer() 
remDr <- remoteDriver(browserName="chrome", port=4444) 
remDr$open(silent=T) 

remDr$navigate(url) 
var <- remDr$findElement('id','details') ### extracting all table### 

vartxt <- var$getElementAttribute("outerHTML")[[1]] 
varxml <- htmlParse(vartxt, useInternalNodes=T) 
Amenities <- xpathSApply(varxml,"//div[@class = expandable-content expandable-content-full']",xmlValue) 

也不起作用

+0

您可以使用[RSelenium](https://cran.r-project.org /web/packages/RSelenium/vignettes/RSelenium-basics.html)能够与页面进行交互,即单击“+更多”链接以显示完整的设施列表......然后,您可以将源代码从RSelenium传递到xpathSApply ,如果你喜欢 – har07

+0

我也尝试过这种方法,但对我来说它也行不通。 如果可能的话,你可以提供一些代码吗? – YNWA1992

+0

我已经发布了一个答案,解释了我会做的解决这个问题的步骤,即使我不习惯在R代码(只尝试RSelenium [曾]](http://stackoverflow.com/questions/29713443/scraping- data-from-tripadvisor-using-r/29713938#29713938)) – har07

回答

1

后您浏览RSelenium司机到目标URL,请使用以下XPath找到<a>元素,其中内文等于“+更多“内设施<div>

remDr$navigate(url) 
link <- remDr$findElement(using = 'xpath', "//div[@class='row amenities']//a[.='+ More']") 

然后链接进行点击来获取设施完整列表:

link$clickElement() 

最后,通过当前网页的HTML源到任何一个R函数要使用作进一步处理:

doc <- htmlParse(remDr$getPageSource()[[1]]) 
.... 
+0

第一步后,它显示错误: 摘要:NoSuchElement \t细节:使用给定的搜索参数无法在页面上找到元素。 \t class:org.openqa.selenium.NoSuchElementException – YNWA1992

+0

我试过//跨度不起作用。 这是行: +更多 YNWA1992