Xpath与Elements一起找到,但无法通过RVest读取/清除

时间:2019-05-12 09:07:59

标签: r web-scraping rvest

我正在尝试清除一组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并不是一个好主意,因为它取决于屏幕截图的大小。

在这种情况下,如何最好地提取我想要的任何建议?谢谢。

1 个答案:

答案 0 :(得分:3)

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

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