rvest:如何找到所需的 CSS 选择器
Posted
技术标签:
【中文标题】rvest:如何找到所需的 CSS 选择器【英文标题】:rvest: how to find required css-selector 【发布时间】:2021-06-16 07:38:29 【问题描述】:我正在尝试使用 rvest
包抓取在议会举行的部分演讲。
使用 css 选择器或 chrome 的检查器工具为我提供了一个选择器,但是我无法检索预期的(任何)数据。 AFAIK,该站点也不是基于 java 等的,即不需要 RSelenium 等。
这里是link:
library(tidyverse)
library(rvest)
library(xml2)
session_1 <- "https://www.parlament.gv.at/PAKT/VHG/XXVII/NRSITZ/NRSITZ_00001/fnameorig_796482.html"
x <- session_1 %>%
rvest::read_html() %>%
rvest::html_element("wordsection14") %>%
rvest::html_text()
最终,我希望能够使用类 'wordsection*' 获取所有元素中包含的文本。
非常感谢任何提示。非常感谢。
【问题讨论】:
由于您正在寻找 class=Wordsection14 而不是 html 标签,因此您需要使用“。”在类名之前,但这仍然无法解决。 我不明白这个页面发生了什么。page %>% html_elements("div")
应该返回一个完整的节点列表(所有的 WordSection),但在这种情况下它只返回前 5 个。
【参考方案1】:
tl;dr 问题不在于 CSS 选择器。就是编码。指定编码 = 'latin1'
read_html('https://www.parlament.gv.at/PAKT/VHG/XXVII/NRSITZ/NRSITZ_00001/fnameorig_796482.html', encoding = "latin1") %>%
html_nodes('[class^=WordSection]') %>%
html_text() %>%
length()
卷曲:
你也可以使用 curl。
library(rvest)
library(curl)
text_info <- curl_fetch_memory("https://www.parlament.gv.at/PAKT/VHG/XXVII/NRSITZ/NRSITZ_00001/fnameorig_796482.html") %>%
rawToChar(.$content) %>%
.[[1]] %>%
read_html() %>%
html_nodes("[class^=WordSection]") %>%
html_text()
CSS 选择器:
如果您使用以运算符 ^ 开头的 css 属性 = 值选择器来获取类值以 WordSection
开头的所有节点。
鉴于存在大量嵌套以避免重复材料,您可能会决定使用nth-child range 选择器或other css selector combinations 来限制匹配列表。
编写一些自定义函数来管理字符串清理。
如果您愿意,当然可以使用不同的 css 选择器。
【讨论】:
@Dave2e 仍然没有缩小原因,而是劫持了 java,因为我注意到它适用于某些 java 实现并返回预期的 69。开始阅读实现细节但尚未解决。跨度> 这是编码。在测试编码时我没有早点选择它的原因是我假设 R 使用了latin-1
,但它是latin1
。最令人沮丧。
@QHarr 我知道这不是 SO 的好习惯,但仍然:非常感谢您深入研究它!
不客气。这让我发疯了。
干得好!这是一个简单的修复。了解未来的好技巧。以上是关于rvest:如何找到所需的 CSS 选择器的主要内容,如果未能解决你的问题,请参考以下文章