Frage

Ich bin derzeit versuchen zu kratzen, eine website, die ziemlich schlecht formatierten HTML (oft fehlenden schließenden tags, keine Verwendung von Klassen oder ids, so ist es unglaublich schwer, zu gehen gerade zu dem element, das Sie wollen, etc.).Ich habe mit BeautifulSoup mit einigem Erfolg, so weit, aber jeder einmal und eine Weile (obwohl sehr selten), ich starte in eine Seite, wo BeautifulSoup erstellt die HTML-Struktur ein bisschen anders (zum Beispiel) von Firefox oder Webkit.Während dies verständlich ist, da die Formatierung der HTML-Blätter diese mehrdeutig, wenn ich waren in der Lage zu erhalten die gleiche parse-Baum wie Firefox oder Webkit produziert, ich wäre in der Lage zu analysieren, die Dinge viel einfacher.Die Probleme sind in der Regel so etwas wie öffnet sich die Seite ein <b> tag-zweimal und wenn BeautifulSoup sieht die zweite <b> tag, es sofort schließt sich der erste, während Firefox und Webkit-Vogelnest <b> tags.

Gibt es eine web-scraping-Bibliothek für Python (oder auch jede andere Sprache (die ich immer bin verzweifelt)), reproduzieren kann der parse-tree erzeugt von Firefox oder WebKit (oder zumindest näher als BeautifulSoup in Fällen von Mehrdeutigkeit).

War es hilfreich?

Lösung

Verwenden Sie BeautifulSoup als Baumbauer html5lib :

from html5lib import HTMLParser, treebuilders

parser = HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))

text = "a<b>b<b>c"
soup = parser.parse(text)
print soup.prettify()

Ausgabe:

<html>
 <head>
 </head>
 <body>
  a
  <b>
   b
   <b>
    c
   </b>
  </b>
 </body>
</html>

Andere Tipps

pyWebKitGTK sieht aus wie es eine Hilfe sein könnte.

Auch hier ist ein Typ, der die gleiche Sache zu tun hatte, aber den Export des Inhalts nach Javascript RAN erhalten, JavaScript ausführen aus python pyWebKitGTK verwenden.

pyWebkitGTK an dem cheese .

Sie können auch tut dies mit pyqt .

Sie haben versucht, scrapy ?

  

ist Scrapy ein schneller High-Level-Bildschirm   Schaben und Web-Framework kriechen,   zu kriechen Websites und Extrakt verwendet   strukturierte Daten von ihren Seiten. Es   kann für eine breite Palette von verwendet werden   Zwecke von Data Mining   Überwachung und automatisierte Tests.

Sie können einen Browser Ihrer Wahl fahren mit SeleniumRC .

Sie können einen Blick auf Mechanize Modul nehmen wollen:

http://wwwsearch.sourceforge.net/mechanize/

Nun, WebKit ist Open Source, so dass Sie einen eigenen Parser (in der WebCore Komponente) verwenden könnten, wenn eine Sprache ist akzeptabel

Ian Bicking schrieb einmal, dass überraschend lxml besser sein könnte Suppen als BeautifulSoup bei Parsen: http://blog.ianbicking.org/2008/12/10/lxml-an-underappreciated-web-scraping-library/ (erwähnen nur als Referenz, haven‘ t versucht, dass persönlich)

Sie können lxml Parser, in der beautifulsoup verwenden, und Sie verwenden XPath die Daten in unformatierte HTML-Seite zu finden, können Sie die XPath kopieren, wenn Sie Element mit Firebug überprüfen.

Sie können aus diesem Tutorial überprüfen: http://www.youtube.com/watch?v=PgWfF-Ut0zM

Aus der Dokumentation scheint es, dass ICantBelieveItsBeautifulSoup parser ist, was Sie wollen:

ICantBelieveItsBeautifulSoup ist auch eine Unterklasse von BeautifulSoup.Es hat HTML Heuristiken, die Ihren Anforderungen entsprechen enger der HTML-standard, aber ignorieren, wie HTML ist in der realen Welt genutzt.Für Beispiel, es ist gültiges HTML zu verschachteln, <B> tags, aber in der realen Welt eine verschachtelte <B> tag bedeutet fast immer, dass die Autor vergessen zu schließen die erste <B> tag.Wenn Sie laufen in jemanden, der tatsächlich Nester <B> - tags, dann können Sie verwenden ICantBelieveItsBeautifulSoup.

diese sieht mir gut ich es bin mit mir: Link

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top