Search code examples
htmlcssrcss-selectorsrvest

rvest: select paragraphs (<p>) that do not contain links (<a>)


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)")

Solution

  • 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>