Ich habe pyparsing für eine Reihe von HTML-Seite Scraping-Projekte verwendet. Es ist eine Art Mittelweg zwischen BeautifulSoup und den vollständigen HTML-Parsern an einem Ende und dem zu niedrigen Ansatz von regulären Ausdrücken (auf diese Weise liegt der Wahnsinn).
Mit Pyparsen können Sie häufig gute HTML-Scraper-Ergebnisse erzielen, indem Sie die bestimmte Teilmenge der Seite oder Daten identifizieren, die Sie extrahieren möchten. Dieser Ansatz vermeidet die Probleme beim Versuch, alles auf der Seite zu analysieren, da einige problematische HTML außerhalb Ihrer Region von Interesse einen umfassenden HTML-Parser auslösen könnte.
Während dies klingt wie eine verherrlichte Regex-Ansatz, bietet Pyparsen Builtins für die Arbeit mit HTML-oder XML-Tagged Text. Pyparsing vermeidet viele der Gefahren, die die Regex-basierten Lösungen zu vereiteln: ohne Littering
- akzeptiert Leerzeichen ‚\ s *‘ am ganzen Ausdruck
- innerhalb unerwartete Eigenschaften Griffe Tags
- Griffe Attribute in beliebiger Reihenfolge
- Griffe Groß-/Kleinschreibung in Tags
- Griffe Namen mit Namensraum
- Griffe Attributwerte in doppelten Anführungszeichen, Apostrophe Attribut oder keine Zitate
- leere Tags behandelt (die von der Form
<blah />
)
- kehrt analysiert Tag-Daten mit dem Objekt-Attribute Zugriff auf Tag-Attribut
Hier ist ein einfaches Beispiel aus dem pyparsing Wiki, die <a href=xxx>
Tags von einem bekommt Webseite:
from pyparsing import makeHTMLTags, SkipTo
# read HTML from a web page
page = urllib.urlopen("http://www.yahoo.com")
htmlText = page.read()
page.close()
# define pyparsing expression to search for within HTML
anchorStart,anchorEnd = makeHTMLTags("a")
anchor = anchorStart + SkipTo(anchorEnd).setResultsName("body") + anchorEnd
for tokens,start,end in anchor.scanString(htmlText):
print tokens.body,'->',tokens.href
Dies wird die <a>
Tags herausziehen, auch wenn es andere Teile der Seite problematisch HTML enthält.Es gibt auch andere HTML-Beispiele am pyparsing wiki:
Pyparsing ist jedoch keine absolute narrensicher Lösung für dieses Problem, aber durch die Belichtungs Englisch: www.doc-o-matic.com/webhelp/TdlgEditEdit.html Sie können besser analysieren, welche Teile des HTML - Dokuments Sie speziell interessieren, sie bearbeiten und überspringen sich ausruhen.
Sie müssen Beispiele für Seiten angeben, auf denen Ihre aktuellen Ansätze fehlschlagen. Wie können wir sonst wissen, ob unsere vorgeschlagenen Lösungen Ihre Probleme lösen werden? Vergessen Sie auch nicht, die Fehler html5lib unter http://code.google.com/p/html5lib/issues/entry zu melden. –