I am new to web scraping. I am using the rvest package in R to scrape web content and I want to select paragraphs (
) that do not contain links ().
So far, I have not been very successful with this approach:
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)")
Unfortunately it seems that the pseudo-class :has()
is not supported by
selectr
/cssselect
which are used by rvest
for parsing css selectors.
Otherwise something like this would work:
# html |>
# html_elements("article") |>
# html_elements("p:not(:has(a))")
We can work around this by converting the xml_nodelist
to character
and
stringr::str_detect()
which <p>
elements have an <a>
in them. Then we
subset the xml_nodelist
to only include those that don’t have link/<a>
in
them.
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>