Schneller Web Scraper / HTML Parser: BeautifulSoup -> LXML -> selectolax

Code-Stücke können hier veröffentlicht werden.
Antworten
August1328
User
Beiträge: 13
Registriert: Samstag 27. Februar 2021, 12:18

Dienstag 17. August 2021, 21:29

Hallo zusammen,

nachdem hier immer wieder die Frage nach Web Scraping bzw. einem HTML Paser gestellt wird und ich zu meiner Umsetzung in der Suche kein Ergebnis gefunden habe, möchte ich hier im Forum nicht nur Fragen stellen sondern auch mal ein Code Beispiel beitragen.

Ich habe ein Skript geschrieben, welches gestreamte Daten verarbeitet, dann ggf. eine Datei aus dem Internet lädt (z.B. von der SEC) und den Inhalt der Datei nach gewissen Textbausteinen durchsucht.

Am Anfang habe ich dafür BeautifulSoup genutzt, wie die meisten wahrscheinlich. Da Geschwindigkeit bei der Verarbeitung des Datenstroms wichtig ist, habe ich nach Möglichkeiten gesucht, das Web Scraping schneller zu machen.

Zuerst habe ich Beautifulsoup durch das Modul lxml ersetzt und das war schon etwas scheller. Dann bin ich irgendwann zufällig auf einen Artikel über "selectolax" gestossen und habe das ausprobiert, was wiederum schneller war.

Nachfolgend ein paar Zeilen Code, um eine Text-Datei einzulesen, die ganzen HTML und sonstige Tags rauszuschmeissen und den Text zum Durchsuchen mit z.B. regex vorzubereiten, d.h. alle unnützen Leerzeichen etc raus und alles ist lowercase.

Code: Alles auswählen

from selectolax.parser import HTMLParser

seclink = "https://www.sec.gov/Archives/edgar/data/.../000....txt"
useragent = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'}

antwort = requests.get(seclink, headers=useragent)

text = HTMLParser(antwort.text).text()
text = " ".join(text.split()).lower()
Die Variable text kann man nun weiter bearbeiten / durchsuchen.

Die github Seite für selectolax lautet: https://github.com/rushter/selectolax - dort gibt es auch weitere Beispiel für andere Anwendungsfälle.

Hier noch der Artikel in Englisch, der mich auf selectolax gebracht hat: https://www.mschweighauser.com/fast-url ... ith-python

Viel Erfolg bei Euren Projekten,
Andy
Antworten