Anfängerfrage zu Regular Expressions

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
BlackJack

@Jurudoca: Was genau denkst Du was Du innerhalb der Schleife machst? Beziehungsweise was denkst du was `link_matches` enthält?

Und ich würde auch eher einen HTML-Parser verwenden, statt das mit regulären Ausdrücken zu lösen.
Jurudoca
User
Beiträge: 23
Registriert: Dienstag 26. Juli 2011, 13:58

Haha...tja die schleife ist irgendwie unsinnig *bg* Danke für den Hinweis
Die HTML Parser sind glaube ich noch ein bisschen zu hoch für mich...Habe schon mit urllib2 herumgespielt...aber da brauche ich noch Zeit...

geht auch so:

Code: Alles auswählen

from httplib import *
import re
def getLinks(url):
    verb = HTTPConnection(url)
    verb.request('GET','/')
    antw = verb.getresponse()
    html = antw.read()

    p = re.compile('(?<=href=")(.*?)(?=")')
    link_matches = p.findall(html)
    print link_matches
    absurd = p.findall(str(link_matches))
    print absurd
   
getLinks('www.spiegel.de')
jetzt muss ich es irgenwie hinbekommen, dass er die Links der eigenen Seite nicht mehr anzeigt, sondern nur noch die externen...das schaff ich hoffentlich bis heute Abend noch ;) Mein Ergebnis poste ich nochmal... Aber der Thread ist sowieso schon so lang...
BlackJack

@Jurudoca: Das „geht” nur bedingt. HTML kann man nicht zuverlässig mit so einfachen regulären Ausdrücken parsen. Der Ausdruck den Du verwendest, kann sowohl Links übersehen, als auch falsche Treffer liefern. Es wird zum Beispiel nicht beachtet ob das Muster innerhalb eines Tags steht. Vorzugsweise eines Tags was nicht zufällig auskommentiert ist. Auf der anderen Seite kann der Wert des Attributs auch in einfache statt doppelter Anführungszeichen eingefasst sein, oder auch in gar keine. Das ist dann zwar kein gültiges HTML, aber solche kaputten Sachen findet man im Netz zuhauf.
Jurudoca
User
Beiträge: 23
Registriert: Dienstag 26. Juli 2011, 13:58

@ Blackjack Ja das kann natürlich sein!
Wie würdest Du mit HTML Parsern vorgehen, um ein Programm zu schreiben was Links auf definierten Seiten zu externen Seiten ausgeben soll...
Welche Libs würdest du in welcher Reihenfolge dafür verwenden...?
Das Ding ist ja...ich will ja nicht html ausgeben sondern auslesen...

Grüße
Jurudoca
BlackJack

@Jurudoca: Ich würde `lxml.html` oder `BeautifulSoup` zum Parsen und extrahieren der Links verwenden. Dann `urllib2.urlparse()` um die URLs in ihre Bestandteile zu zerlegen. Für die Daten sollte man Quelltext schreiben können, der interne von externen Links unterscheidet.
Antworten