首页 > 解决方案 > 使用 Selenium 从 HTML 获取信息

问题描述

我正在尝试使用 R 从亚马逊网站中提取一些文本。可能是因为亚马逊使用了 ajax 技术,所以无法直接使用 xml_attrs() 提取数据。

library(rvest) 
library(RSelenium)
Produktlink<-'https://www.amazon.de/AmazonBasics-CW190423-Mikrofaser-Reinigungst%C3%BCcher-24-St%C3%BCck/dp/B009FUF6DM/ref=zg_bs_automotive_10/262-2805299-5636062?_encoding=UTF8&psc=1&refRID=TK56QZCA9CH997338J1B'
Name<-xml_attrs(xml_child(xml_child(xml_child(xml_child(xml_child(xml_child(xml_child(xml_child(xml_child(xml_child(read_html(pageSource), 2), 1), 46), 8), 8), 3), 1), 1), 1), 1))[["class"]]

这就是为什么我认为我需要 Docker 和 Selenium:

remDr <- RSelenium::remoteDriver(remoteServerAddr = "192.168.99.100", port = 4445L)
remDr$open(silent = T)

remDr$navigate(Produktlink)

但我无法找到例如产品名称搜索:

webElem <- remDr$findElement(using = "class", "a-size-large")
webElem$getElementAttribute("name")

谁能帮助我,或者有人知道从网站中提取文本的其他方法吗?

此致

标签: htmlrseleniumdocker

解决方案


我认为您不需要 RSelenium。我发现产品标题如下:

library(rvest) 
library(xml2)
library(stringr)

Produktlink <- 'https://www.amazon.de/AmazonBasics-CW190423-Mikrofaser-Reinigungst%C3%BCcher-24-St%C3%BCck/dp/B009FUF6DM/ref=zg_bs_automotive_10/262-2805299-5636062?_encoding=UTF8&psc=1&refRID=TK56QZCA9CH997338J1B'

html <- read_html(Produktlink)

html %>%
  xml2::xml_find_all("//span[@id = 'productTitle']") %>%
  xml_text %>%
  str_replace_all('\n','') %>%
  trimws()

结果:

[1] "AmazonBasics Mikrofaser-Reinigungstücher, 24 Stück"

推荐阅读