我想使用
rvest
检索特定 HTML 元素的 CSS。例如,假设我访问 Google 的主页。如果我检查网页并导航到第 7 个 input
元素,我可以看到它包含 value = "Google Search"
属性。我还可以使用下面的代码看到这一点。但是,我看不到使用 rvest
应用于元素(字体系列、颜色等)的 CSS,但在检查页面时可以看到它。如何使用 rvest
查看 CSS?
library(rvest)
library(tidyverse)
url <- r'(https://www.google.com)'
# get html element for 'Google Search' text
search_text <-
read_html(url) %>%
html_elements('input') %>%
pluck(7)
# print it
search_text
#> {html_node}
#> <input class="lsb" value="Google Search" name="btnG" type="submit">
# show all attributes
search_text %>%
html_attrs()
#> class value name type
#> "lsb" "Google Search" "btnG" "submit"
创建于 2023-12-12,使用 reprex v2.0.2
此类的 css 存储在页面上第二个
<style>
标签的主体中。要提取它,我们首先获取输入的 class
属性的名称:
library(rvest)
library(tidyverse)
url <- r'(https://www.google.com)'
css_class <- read_html(url) %>%
html_elements('input') %>%
pluck(7) %>%
html_attr('class')
css_class
#> [1] "lsb"
要获取CSS,需要获取第二个样式标签的内容并进行一些文本解析,将其与所需的CSS类匹配:
read_html(url) %>%
html_elements('style') %>%
pluck(2) %>%
html_text() %>%
strsplit('}') %>%
getElement(1) %>%
{.[nchar(.) > 1]} %>%
paste0('}') %>%
{grep(paste0('\\.', css_class, '\\{'), ., value = TRUE)} %>%
{gsub(';', ';\n', .)} %>%
cat()
#> .lsb{background:url(/images/nav_logo229.png) 0 -261px repeat-x;
#> color:#000;
#> border:none;
#> cursor:pointer;
#> height:30px;
#> margin:0;
#> outline:0;
#> font:15px arial,sans-serif;
#> vertical-align:top}
创建于 2023-12-12,使用 reprex v2.0.2