Scrape <ul> with corresponding <p> tag

Viewed 33

I have the following html snipped:

      <div class="main--content">
    <p> <strong>Ihre Aufgaben:</strong> </p> 
        <ul> 
            <li>Zentraler Ansprechpartner für den gesamten Mitarbeiterlebenszyklus
            </li> 
            <li>Partnerschaft mit den Geschäftsbereichen, um innovative Lösungen für die Mitarbeitererfahrung zu implementieren und zu entwickeln
            </li> 
            <li>Beratung zur Nachfolgeregelung, Analyse der Talentpyramide und Aufbauempfehlungen
            </li> 
            <li>Unterstützung der Führungseffektivität durch die Bereitstellung von Analyseberichten und die Nutzung der aktuellen HR-Strategie
            </li> <li>Evaluierung von HR-Richtlinien und -Prozessen
            </li> 
            <li>Erstellen und Entwickeln neuer Aktivitäten zur Verbesserung des Mitarbeiterengagements
            </li> 
            <li>Sicherstellen, dass der HRBP-Bereich eng mit den Geschäfts- und HR-Stakeholdern verbunden ist
            </li>
            <li>Tätigkeit als Moderator und innovatives Teammitglied bei der Umsetzung globaler HR-Projekte
            </li> 
        </ul> 
    <p>Ihr Profil:</p> 
        <ul> 
            <li>Kaufmännische Ausbildung mit Weiterbildung als Eidg. Dipl. HR-Fachfrau/mann
            </li> 
            <li>Mehrjährige Berufserfahrung in einer ähnlichen Funktion
            </li> 
            <li>Effektive Präsentations- und Kommunikationsfähigkeiten
            </li>
        </ul>
  </div>

I want to extract the title, in this case whatever is written in the p tag and the corresponding list elements.

I can get the p and ul elements from this, but I am not able to dynamically give the structure. I work with rvest

Following chunk returns the list elements:

tmp %>% rvest::html_elements("ul > li")
[1] <li>Zentraler Ansprechpartner für den gesamten Mitarbeiterlebenszyklus</li>
[2] <li>Partnerschaft mit den Geschäftsbereichen, um innovative Lösungen für die Mitarbeitererfahrung zu implementieren und zu entwickeln</li>

And the titles:

tmp %>% rvest::html_elements("p")
[6] <p> <strong>Ihre Aufgaben:</strong> </p>
[7] <p>Ihr Profil:</p>

Is there a way to extract the list to a dataframe or list?

1 Answers
library(rvest)
library(purrr)
doc <- minimal_html('<div class="main--content">
    <p> <strong>Ihre Aufgaben:</strong> </p> 
        <ul> 
            <li>Zentraler Ansprechpartner für den gesamten Mitarbeiterlebenszyklus
            </li> 
            <li>Partnerschaft mit den Geschäftsbereichen, um innovative Lösungen für die Mitarbeitererfahrung zu implementieren und zu entwickeln
            </li> 
            <li>Beratung zur Nachfolgeregelung, Analyse der Talentpyramide und Aufbauempfehlungen
            </li> 
            <li>Unterstützung der Führungseffektivität durch die Bereitstellung von Analyseberichten und die Nutzung der aktuellen HR-Strategie
            </li> <li>Evaluierung von HR-Richtlinien und -Prozessen
            </li> 
            <li>Erstellen und Entwickeln neuer Aktivitäten zur Verbesserung des Mitarbeiterengagements
            </li> 
            <li>Sicherstellen, dass der HRBP-Bereich eng mit den Geschäfts- und HR-Stakeholdern verbunden ist
            </li>
            <li>Tätigkeit als Moderator und innovatives Teammitglied bei der Umsetzung globaler HR-Projekte
            </li> 
        </ul> 
    <p>Ihr Profil:</p> 
        <ul> 
            <li>Kaufmännische Ausbildung mit Weiterbildung als Eidg. Dipl. HR-Fachfrau/mann
            </li> 
            <li>Mehrjährige Berufserfahrung in einer ähnlichen Funktion
            </li> 
            <li>Effektive Präsentations- und Kommunikationsfähigkeiten
            </li>
        </ul>
  </div>')

## get all p and ul elements
p_and_ul <- doc %>% html_elements("p,ul") 

## which of these elements are p elements?
is_p <- p_and_ul %>% html_element("li") %>% is.na()

## for each ul element get the li children
all_li <- map(p_and_ul[!is_p], ~ html_elements(.x, "li"))

## put all results togteher
res <- vector("list", length(p_and_ul))
res[is_p] <- map_chr(p_and_ul[is_p], as.character)
res[!is_p] <- map(all_li, as.character)
unlist(res)

#  [1] "<p> <strong>Ihre Aufgaben:</strong> </p>"                                                                                                                
#  [2] "<li>Zentraler Ansprechpartner für den gesamten Mitarbeiterlebenszyklus\n            </li>"                                                               
#  [3] "<li>Partnerschaft mit den Geschäftsbereichen, um innovative Lösungen für die Mitarbeitererfahrung zu implementieren und zu entwickeln\n            </li>"
#  [4] "<li>Beratung zur Nachfolgeregelung, Analyse der Talentpyramide und Aufbauempfehlungen\n            </li>"                                                
#  [5] "<li>Unterstützung der Führungseffektivität durch die Bereitstellung von Analyseberichten und die Nutzung der aktuellen HR-Strategie\n            </li>"  
#  [6] "<li>Evaluierung von HR-Richtlinien und -Prozessen\n            </li>"                                                                                    
#  [7] "<li>Erstellen und Entwickeln neuer Aktivitäten zur Verbesserung des Mitarbeiterengagements\n            </li>"                                           
#  [8] "<li>Sicherstellen, dass der HRBP-Bereich eng mit den Geschäfts- und HR-Stakeholdern verbunden ist\n            </li>"                                    
#  [9] "<li>Tätigkeit als Moderator und innovatives Teammitglied bei der Umsetzung globaler HR-Projekte\n            </li>"                                      
# [10] "<p>Ihr Profil:</p>"                                                                                                                                      
# [11] "<li>Kaufmännische Ausbildung mit Weiterbildung als Eidg. Dipl. HR-Fachfrau/mann\n            </li>"                                                      
# [12] "<li>Mehrjährige Berufserfahrung in einer ähnlichen Funktion\n            </li>"                                                                          
# [13] "<li>Effektive Präsentations- und Kommunikationsfähigkeiten\n            </li>"
Related