2016-06-08 23 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