Xpath包含元素,但无法通过rvest读取/删除

Xpath包含元素,但无法通过rvest读取/删除,r,web-scraping,rvest,R,Web Scraping,Rvest,我正试图从一组表格中划掉所列的数额。在这个例子中,我想得到 $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\u节点

我正试图从一组表格中划掉所列的数额。在这个例子中,我想得到

$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\u节点集
中看到了一些东西:

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'
)
这给出了很多东西,但是所有的
StyledButton\uuu StyledAnchorButton-a7s38j-0 kEcVlT
都变成空白

我已经在
rvest
上工作了一段时间了,但这一次令人困惑。虽然我知道如何使用RSelenium进行屏幕截图和点击,但我不太确定RSelenium在这方面会有什么帮助。如果有帮助,网站也拒绝这样做——只有背景,没有其他

我甚至尝试过用
RSelenium
截图,并尝试用
tessaract
magick
进行ocr,但当其他页面工作时,这个特殊的例子却失败了,因为文本是白色的,字体相当不标准。是的,我尝试了
image\u negative
image\u resize
来看看它是否有帮助,但它只表明依赖OCR是一个相当糟糕的主意,因为它取决于屏幕截图的大小


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

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

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])
库(rvest)
图书馆(stringr)
con%
html_text()%>%as.character%>%

str_匹配所有(,'(?似乎所有的值都在标记
label
中,并且没有其他
label
所以你只能使用
//label
来获得它-你不需要所有这些
div
li
我在web浏览器中关闭了JavaScript并选中了页面-它使用JavaScript来显示它。但是在Chrome/Firefox中使用DevTool我不需要请看,它是从服务器读取的。但在HTML中,我发现了以下内容:
“金额”:[300100025001025000150000280000]“
而且您的值似乎是以美分为单位的。@furas它是以美分为单位的(打了一下额头)--谢谢您的提示。
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])