rvest:选择< p>不包含链接()的段落(< a>)

nhhxz33t  于 2023-09-27  发布在  其他
关注(0)|答案(3)|浏览(77)

我是新的网页抓取。我正在使用R中的rvest包来抓取网页内容,我想选择段落(
)不包含链接()。
到目前为止,我还没有成功地使用这种方法:

html <- read_html("https://www.news4teachers.de/2023/08/schaemt-euch-deutschland-steht-vor-den-vereinten-nationen-am-pranger-weil-es-die-inklusion-an-schulen-verweigert/")

html |>
  html_elements("article") |>
  html_elements("p") |>
  html_elements(":not(a)")
5f0d552i

5f0d552i1#

要获取所有不包含任何<a>标记的<p>标记,可以使用xpath表达式:

html_elements(html, xpath = "//article/div/p[not(descendant::a)]") 
#> {xml_nodeset (13)}
#>  [1] <p>GENF. <strong>„Schämt Euch!“ – so heißt es auf einem Transparent, das ...
#>  [2] <p><script charset="utf-8" async consent-original-src-_="https://platfor ...
#>  [3] <p>Es ist fast schon dreist, wie Deutschland auf die offizielle Staatenp ...
#>  [4] <p>Auch in einer gemeinsamen Stellungnahme von einem Bündnis deutscher N ...
#>  [5] <p>„In keinem Bildungsbereich – von der Kita über Schule, Ausbildung und ...
#>  [6] <p>Die Ausführungen der Bundesregierung im Staatenbericht, so heißt es w ...
#>  [7] <p>Sonderpädagoginnen und -pädagogen würden immer noch weitestgehend für ...
#>  [8] <p>Die Einführung inklusiver Bildung in Regelschulen sei von erheblichem ...
#>  [9] <p><script charset="utf-8" async consent-original-src-_="https://platfor ...
#> [10] <p><script charset="utf-8" async consent-original-src-_="https://platfor ...
#> [11] <p>Der Rechtsanspruch auf inklusive Schulbildung sei in den meisten Bund ...
#> [12] <p><iframe class="wp-embedded-content" sandbox="allow-scripts" security= ...
#> [13] <p> </p>

创建于2023-09-21使用reprex v2.0.2

oxf4rvwz

oxf4rvwz2#

您可以选择所有<p>标记,然后在R中过滤它们,如果它们有任何<a>标记。例如

html |>
  html_elements("article") |>
  html_elements("p") |>
  Filter(function(x) {
    length(html_element(x, "a"))<1
  }, x=_)
gudnpqoy

gudnpqoy3#

不幸的是,rvest用来解析css选择器的selectr/cssselect似乎不支持伪类:has()。否则,类似这样的东西会起作用:

# html |>
#  html_elements("article") |>
#  html_elements("p:not(:has(a))")

我们可以通过将xml_nodelist转换为characterstringr::str_detect()来解决这个问题,其中<p>元素中有<a>。然后我们将xml_nodelist子集化,只包含那些没有link/<a>的。

library(rvest)
library(stringr)

html <-
  read_html(
    "https://www.news4teachers.de/2023/08/schaemt-euch-deutschland-steht-vor-den-vereinten-nationen-am-pranger-weil-es-die-inklusion-an-schulen-verweigert/"
  )

all_p <-
  html |>
  html_elements("article") |>
  html_elements("p")

has_link <- all_p |> as.character() |> str_detect("</a>")

all_p[!has_link]
#> {xml_nodeset (13)}
#>  [1] <p>GENF. <strong>„Schämt Euch!“ – so heißt es auf einem Transparent, das ...
#>  [2] <p><script charset="utf-8" async consent-original-src-_="https://platfor ...
#>  [3] <p>Es ist fast schon dreist, wie Deutschland auf die offizielle Staatenp ...
#>  [4] <p>Auch in einer gemeinsamen Stellungnahme von einem Bündnis deutscher N ...
#>  [5] <p>„In keinem Bildungsbereich – von der Kita über Schule, Ausbildung und ...
#>  [6] <p>Die Ausführungen der Bundesregierung im Staatenbericht, so heißt es w ...
#>  [7] <p>Sonderpädagoginnen und -pädagogen würden immer noch weitestgehend für ...
#>  [8] <p>Die Einführung inklusiver Bildung in Regelschulen sei von erheblichem ...
#>  [9] <p><script charset="utf-8" async consent-original-src-_="https://platfor ...
#> [10] <p><script charset="utf-8" async consent-original-src-_="https://platfor ...
#> [11] <p>Der Rechtsanspruch auf inklusive Schulbildung sei in den meisten Bund ...
#> [12] <p><iframe class="wp-embedded-content" sandbox="allow-scripts" security= ...
#> [13] <p> </p>

相关问题