Seite 1 von 1

'Dive into Python' Tut: Extracting data from HTML documents

Verfasst: Samstag 16. Februar 2013, 17:39
von Sinnentlehrt
Hallo Leute,

beschäftige mich so ein bisschen Privat mit Python und ich bin noch weit entfernt dahinter zu steigen. :roll:

Hänge jetzt gerade am folgendem Problem, ein Beispiel klappt, ein anderes nicht und natürlich habe ich keinen Schimmer warum nicht.

Das auf meinem Rechner (Win7/64, Python 2.6) alles eigentlich laufen sollte, lässt sich glaube ich an diesem Beispiel ablesen.

Code: Alles auswählen

>>> import urllib                                       
>>> sock = urllib.urlopen("http://diveintopython.org/") 
>>> htmlSource = sock.read()                            
>>> sock.close()                                        
>>> print htmlSource

Stellt die gewünschte Ausgabe da.

Hier aber:

Code: Alles auswählen

>>> import urllib, urllister
>>> usock = urllib.urlopen("http://diveintopython.org/")
>>> parser = urllister.URLLister()
>>> parser.feed(usock.read())         
>>> usock.close()                     
>>> parser.close()                    
>>> for url in parser.urls: print url
bleibt der Prompt einfach leer. Da dieses Beispiel direkt aus dem Buch kommt,

http://www.diveintopython.net/html_proc ... _data.html

hat vielleicht jemand eine Idee?

Gruß,

Sinni

Re: 'Dive into Python' Tut: Extracting data from HTML docume

Verfasst: Samstag 16. Februar 2013, 18:12
von BlackJack
@Sinnentlehrt: Du hast im Beispiel davor ja den HTML-Quelltext ausgegeben. Nun zähl doch einfach mal per Hand nach wieviele <a>-Tags da enthalten sind. Dann sollte klar sein warum keine ausgegeben werden.

Wobei dieses Beispiel sowieso nur sehr begrenzt praxistauglich ist, denn es geht von korrektem HTML aus. Das meiste HTML, welches man im Netz findet, ist aber leider nicht korrekt. Darum verwendet man Parser wie `lxml.html` die auch mit kaputtem HTML-Quelltext umgehen können. Das Ergebnis ist in diesem Fall natürlich das gleiche:

Code: Alles auswählen

In [17]: from lxml import html

In [18]: list(html.parse('http://diveintopython.org/').getroot().iterlinks())
Out[18]: []

In [19]: len(list(html.parse('http://python-forum.de/').getroot().iterlinks()))
Out[19]: 134

Re: 'Dive into Python' Tut: Extracting data from HTML docume

Verfasst: Montag 25. Februar 2013, 22:59
von Sinnentlehrt
Hi Black Jack,

danke für die schnelle Antwort und entschuldige für die lange Abwesenheit.

Gut zu wissen das es lxml gibt.

In meinem Beispiel war wohl das Hauptproblem das es die URL http://www.diveintopython.org/ gar nicht mehr gab und diese durch http://www.diveintopython.net/ ersetzt worden ist.

Gruss,