如何使用rvest获取css信息

问题描述 投票:0回答:1

我想使用

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

r rvest
1个回答
0
投票

此类的 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

© www.soinside.com 2019 - 2024. All rights reserved.