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

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

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
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
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
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

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,
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
Antworten