【问题标题】:Xpath found with Elements but not readable/scrapeable via rvest使用 Elements 找到 Xpath,但无法通过 rvest 读取/抓取
【发布时间】:2019-05-12 09:07:58
【问题描述】:

我正在尝试删除一组donation websites 中列出的数量。所以在这个例子中,我想得到

3 美元、10 美元、25 美元、100 美元、250 美元、1500 美元、2800 美元

xpath 表明其中一个应该是

/html/body/div[1]/div[3]/div[2]/div/div[1]/div/div/    
form/div/div[1]/div/div/ul/li[2]/label

和css选择器

li.btn--wrapper:nth-child(2) > label:nth-child(1)

直到下面,我在xml_nodeset看到了一些东西:

library(rvest)
url <- "https://secure.actblue.com/donate/pete-buttigieg-announcement-day"
read_html(url) %>% html_nodes(
  xpath = '//*[@id="cf-app-target"]/div[3]/div[2]/div/div[1]/div/div'
)

然后我看到添加了 xpath 的第二部分,它显示为空白。与

相同
X %>% html_nodes("li")

这提供了很多东西,但所有StyledButton__StyledAnchorButton-a7s38j-0 kEcVlT 都变成空白。

我现在已经和rvest 合作了一段时间,但这个令人莫名其妙。而且我不太确定RSelenium 将如何提供帮助,尽管我知道如何将其用于屏幕截图和点击。如果有帮助,该网站也拒绝成为captured in the wayback machine——只有背景,没有别的。

我什至尝试使用RSelenium 截取屏幕截图并尝试使用tessaractmagick 进行ocr,但是当其他页面正常工作时,这个特定示例非常失败,因为文本是白色的并且字体相当不标准.是的,我试过image_negateimage_resize 看看它是否有帮助,但它只表明依赖OCR 是个坏主意,因为它取决于屏幕截图的大小。

关于如何在这种情况下最好地提取我想要的东西有什么建议吗?谢谢。

【问题讨论】:

  • 似乎所有值都在标签 label 中,并且没有其他 label 所以你只能使用 //label 来获取它 - 你不需要所有这些 divli
  • 我在网络浏览器中关闭了 JavaScript 并检查了页面 - 它使用 JavaScript 来显示它。但是在 Chrome/Firefox 中使用 DevTool 我看不到它从服务器读取它。但在 HTML 中,我发现了这个:"amounts":[300,1000,2500,10000,25000,150000,280000]",你的值似乎是美分。
  • @furas 它是 美分(额头)---谢谢你的提示。

标签: r web-scraping rvest


【解决方案1】:

您可以使用正则表达式从脚本标签中提取数字。你得到一个逗号分隔的字符向量

library(rvest)
library(stringr)
con <- url('https://secure.actblue.com/donate/pete-buttigieg-announcement-day?refcode=website', "rb")
page = read_html(con)
res <- page %>%
  html_nodes(xpath=".//script[contains(., 'preloadedState')]")%>%
  html_text() %>% as.character %>% 
  str_match_all(.,'(?<="amounts":\\[)(\\d+,?)+')
print(res[[1]][,1])

试试here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多