【问题标题】:Web-scraping in r. How to scrape the data from ("+More" etc).?r 中的网页抓取。如何从(“+更多”等)中抓取数据?
【发布时间】:2016-06-08 08:49:14
【问题描述】:

假设我想从此网页 (https://www.airbnb.com/rooms/6676364) 获取有关设施的信息。它仅适用于可见部分。 但是如何从“+More”按钮中提取其余部分?

我在 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)

也不行

【问题讨论】:

  • 您可以使用RSelenium 与页面交互,即单击“+更多”链接以显示完整的设施列表...然后您可以将源从 RSelenium 传递给 xpathSApply,如果你喜欢
  • 我也尝试过这种方法,但对我来说它也不起作用。如果可以的话,你能提供一些代码吗?
  • 我已经发布了一个答案,解释了我将采取哪些步骤来解决这个问题,即使我不习惯在 R 中编码(只尝试过 RSelenium once
  • 也许我们不应该要求其他人共同违反Terms of Service。只是 b/c 你可以做某事并不意味着你应该做。

标签: r xpath web-scraping


【解决方案1】:

将 RSelenium 驱动程序导航到目标 URL 后,使用以下 XPath 查找 &lt;a&gt; 元素,其中内部文本等于“+ More”在便利设施 &lt;div&gt; 中:

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

然后单击链接以获取完整的便利设施列表:

link$clickElement()

最后,将当前页面的 HTML 源代码传递给您想要用于进一步处理的任何 R 函数:

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

【讨论】:

  • 在您的第一步之后,它向我显示一个错误:摘要:NoSuchElement 详细信息:使用给定的搜索参数无法在页面上找到一个元素。类:org.openqa.selenium.NoSuchElementException
  • 我用 //span 试过了,它不起作用。这是行:+更多
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 2020-07-20
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
相关资源
最近更新 更多