String aus Webseite auslesen. Geht das noch schneller?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

Hallo,

momentan benutze ich folgenden Code um nach einem Bestimmten String im Quelltext einer Webseite zu suchen. Da ich das script später sehr oft ausführen möchte, stellt sich mir jetzt die Frage ob vielleicht BeautifulSoup dafür ein bißchen zu langsam ist. Ich brauche ja im Prinzip keinen XML geparseten Quelltext sondern mir würde schon der Rohquelltext reichen oder?
Hier mal das entsprechende Code Snippet:

Code: Alles auswählen

page = urllib2.urlopen(link)
soup = BeautifulSoup(page)
    if  soup.find("div", {"class" : "box_red"}) :
        print "0"
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du könntest es ja mal mit lxml oder htmllib5 versuchen. Evtl. parsen die schneller!

Dazu aber mal: Spielt die Geschwindigkeit denn da die entscheidene Rolle? Ich würde spontan doch eher das Runterladen als Bottleneck annehmen...

Ich würde bei Speedproblemen erst dann wirklich eingreifen, wenn man merkt, dass es hakt.

Neben dem oben gesagten könnte man ganz zur Not das Runterladen und das Parsen ind zwei verschiedene Threads oder Prozesse aufteilen.

Sollte es sich immer genau um diese eine Stelle handeln und das extremst fix ist, wäre hier auch ein RegExp eine Möglichkeit. Prinzipiell sind die zum Parsen von verschachtelten Strukturen, wie eben html, nicht geeignet, aber da Du ja nur eine Stelle finden willst, würde das hier ja keine Rolle spielen.

Aber wie gesagt, erst optmieren, wenn es wirklich dringlich ist.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

Alles klar, vielen Dank für die Einschätzung.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

dein Code ist ja rel. einfach, spricht dass solltest du mit timeit recht leicht messen können. Oft ist es aber in der Tat so, dass I/O, Netzzugriff oder DB-Zugriff um ein vielfacher langsamer ist als die Ausführung von (Python-) Code - gerade, wenn es nur kurzer Code ohne großartige Berechnung ist.

Gruß, noisefloor
Antworten