Schoene Suppe

  • auf der suche nach einer einfachen art, web-pages zu parsen bin ich auf die lib beautifulsoup gestossen.

    erlaubt im gegensatz zu re-konstrukten eine uebersichtliche art zu parsen... hier ein kleines beispiel fuer das parsen von tabellen:

    Python
            from bs4 import BeautifulSoup
    
            soup = BeautifulSoup(html, "html.parser")
            tables = soup.find_all("table")
            for table in tables:
                rows = table.find_all("tr")
                for row in rows:
                    cols = row.find_all("td")
                    for col in cols:
                        process_col()

    vielleicht kann es ja mal einer gebrauchen... :winking_face:

    Einmal editiert, zuletzt von alpha ()

  • Ich nutze für manches auch "bs4" aber das kann man jetzt nicht für mehrere Seiten gleich nutzen, muss immer angepasst werden.


    Hier mal wie ich eine Seite lese fürs Wled-Plugin:


    Bedeute aber nicht das ich dann immer "bs4" nutze, hier ist es dann mit "re" ab und zu schon einfacher.

    Aber wenn man sich mit bs4 auskennt, dann glaube ich ist das schon eine schöne Hilfe, für mich ist das auch immer testen testen testen. :smiling_face:

  • Habe mittlerweile "Schöne Suppe" installiert.

    Ich will Daten von einer Webseite lesen. Die Daten - die ich brauche (zb. Title (title="bla bla bla">also dieser Titel<) - sind in einer Tabelle.

    Ich wollte dafür ".select_one" nutzen, aber ist leider nicht gestattet weil angeblich das 'soupsieve' Paket nicht installiert ist.

    Deswegen kann ich CSS-selectors ja nicht nutzen. Auf der dreamboxupdate Feed kann ich das 'soupsieve' Paket nicht finden.


    Um die Daten zu kriegen habe ich:

    Python
    resp = requests.get(url)
    soup = BeautifulSoup(resp.content, 'html.parser')
        
    for table in soup.select('tbody tr'):
       t = table.select_one('td.field.title div a').get('title')


    Ich bekomme dann diese Fehlermeldung:



    Frage ist: wie kriege ich das 'soupsieve Paket installiert oder gibt es eine andere Möglichkeit um Text aus Tabellendaten (<td>) zu extrahieren?

  • ich brauche zb. von dieser Webseite, die Namen von den Ländern (erste Spalte) und die zweistellige (einzigartiger) Code (zweite Spalte) und die werden dann jeweils eingetragen in: countryName und countyCode

    Alle Daten werden dann in die Liste "countries' eingetragen und zwar so: countries.append(countryCode + "-" + countryName)

    Es gibt dann zb.: DE-Deutschland


    Man braucht dafür die 3'er Tabelle: table = soup.find_all('table')[2].


    Die Webseite ist zwar eine wikiSeite, aber leider alles andere als wissenschaftlich konstruiert worden; deswegen wollte ich in die Tabellenzeilen (<tr>...</tr>) die ersten Tabellendaten (<td>...</td>) nehmen und danach suchen nach  title="

  • Darauf hab ich keinen Einfluss. Sie liegt aber auch auf unserem Feed. Ich hab mir das recipe einfach in pyro und krogoth eingefügt und die notwendigen Packages gebaut (bei krogoth braucht es noch ein paar mehr als bei pyro).

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource


  • vorher musst du noch die entsprechende table parsen und dann eine loop ueber alle rows.

  • python-soupsieve im Anhang für dreamone/dreamtwo

    Leider feht eine Abhängigkeit: python-backports-functools-lru-cache


    python-soupsieve:arm64 depends on python-backports-functools-lru-cache; however:

    Package python-backports-functools-lru-cache is not installed.