当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R rvest html_element 从 HTML 文档中选择元素


html_element()html_elements() 使用 CSS 选择器或 XPath 表达式查找 HTML 元素。 CSS 选择器与 https://selectorgadget.com/ 结合使用特别有用,这使得您可以轻松找到所需的选择器。

用法

html_element(x, css, xpath)

html_elements(x, css, xpath)

参数

x

文档、节点集或单个节点。

css, xpath

要选择的元素。根据您要使用 CSS 选择器还是 XPath 1.0 表达式,提供 cssxpath 之一。

html_element() 返回与输入长度相同的节点集。 html_elements() 扁平化输出,因此没有直接的方法将输出映射到输入。

CSS 选择器支持

CSS 选择器通过以下方式转换为 XPath 选择器选择器package,这是python的一个端口CSS选择 Library ,https://pythonhosted.org/cssselect/.

它实现了大多数 CSS3 选择器,如中所述https://www.w3.org/TR/2011/REC-css3-selectors-20110929/。下面列出了例外情况:

  • 需要交互性的伪选择器将被忽略: :hover:active:focus:target:visited

  • 以下伪类不适用于通配符元素 *: *:first-of-type*:last-of-type*:nth-of-type*:nth-last-of-type*:only-of-type

  • 它支持:contains(text)

  • 可以使用!=,[foo!=bar]:not([foo=bar])相同

  • :not() 接受一系列简单选择器,而不仅仅是一个简单选择器。

例子

html <- minimal_html("
  <h1>This is a heading</h1>
  <p id='first'>This is a paragraph</p>
  <p class='important'>This is an important paragraph</p>
")

html %>% html_element("h1")
#> {html_node}
#> <h1>
html %>% html_elements("p")
#> {xml_nodeset (2)}
#> [1] <p id="first">This is a paragraph</p>
#> [2] <p class="important">This is an important paragraph</p>
html %>% html_elements(".important")
#> {xml_nodeset (1)}
#> [1] <p class="important">This is an important paragraph</p>
html %>% html_elements("#first")
#> {xml_nodeset (1)}
#> [1] <p id="first">This is a paragraph</p>

# html_element() vs html_elements() --------------------------------------
html <- minimal_html("
  <ul>
    <li><b>C-3PO</b> is a <i>droid</i> that weighs <span class='weight'>167 kg</span></li>
    <li><b>R2-D2</b> is a <i>droid</i> that weighs <span class='weight'>96 kg</span></li>
    <li><b>Yoda</b> weighs <span class='weight'>66 kg</span></li>
    <li><b>R4-P17</b> is a <i>droid</i></li>
  </ul>
")
li <- html %>% html_elements("li")

# When applied to a node set, html_elements() returns all matching elements
# beneath any of the inputs, flattening results into a new node set.
li %>% html_elements("i")
#> {xml_nodeset (3)}
#> [1] <i>droid</i>
#> [2] <i>droid</i>
#> [3] <i>droid</i>

# When applied to a node set, html_element() always returns a vector the
# same length as the input, using a "missing" element where needed.
li %>% html_element("i")
#> {xml_nodeset (4)}
#> [1] <i>droid</i>
#> [2] <i>droid</i>
#> [3] <NA>
#> [4] <i>droid</i>
# and html_text() and html_attr() will return NA
li %>% html_element("i") %>% html_text2()
#> [1] "droid" "droid" NA      "droid"
li %>% html_element("span") %>% html_attr("class")
#> [1] "weight" "weight" "weight" NA      
源代码:R/selectors.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Select elements from an HTML document。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。