Ich versuche, diese Tabelle Ссылка ins Array-Format zu bekommen, damit ich damit machen kann, was ich will . Vorzugsweise in PHP, Python oder JavaScript.
Dies ist die Art von Problem, das viel auftaucht. Anstatt nach Hilfe für dieses spezielle Problem zu suchen, suche ich nach Ideen, wie man alle ähnlichen Probleme lösen kann.
BeautifulSoup ist das Erste, was einem einfällt. Eine andere Möglichkeit ist das Kopieren / Einfügen in TextMate und das Ausführen von regulären Ausdrücken.
Was schlägst du vor?
Dies ist das Skript, das ich am Ende geschrieben habe, aber wie gesagt, ich suche nach einer allgemeineren Lösung.
%Vor%Kommentare und Verbesserungsvorschläge für meinen Python-Code sind ebenfalls willkommen;)
Für Ihr generelles Problem: versuchen Sie lxml.html von lxml Paket (denke an es als die stdlibs xml.etree auf Steroiden: die gleiche XML API, aber mit HTML-Unterstützung, xpath, xslt etc ...)
Ein schnelles Beispiel für Ihren speziellen Fall:
%Vor%Damit erhalten Sie eine verschachtelte Liste: Jede Unterliste entspricht einer Zeile in der Tabelle und enthält die Daten aus den Zellen. Die hinterhältig eingefügten Werbungszeilen sind noch nicht ausgefiltert, aber es sollte dich auf den Weg bringen. (Und übrigens: lxml ist schnell!)
ABER: Genauer gesagt für Ihren speziellen Anwendungsfall: Es gibt bessere Möglichkeiten, Informationen über die Zeitzonendatenbank zu erhalten, als dies zu tun bestimmte Webseite (beiseite: Beachten Sie, dass die Webseite tatsächlich erwähnt, dass Sie nicht ihre Inhalte kopieren dürfen). Es gibt sogar bereits vorhandene Bibliotheken, die diese Informationen bereits verwenden, siehe zum Beispiel python-dateutil .
Vermeiden Sie reguläre Ausdrücke zum Parsen von HTML, sie sind einfach nicht dafür geeignet, Sie wollen einen DOM-Parser wie BeautifulSoup sicher ...
Einige andere Alternativen
All dies ist tolerant gegenüber schlecht gebildetem HTML.
Ich empfehle, das Dokument mit einem XML-Parser wie DOMDocument :: loadHTMLFile zu laden, der mit PHP gebündelt ist, und dann XPath zu verwenden, um die benötigten Daten zu erfassen.
Dies ist nicht der schnellste Weg, aber am Ende (meiner Meinung nach) am besten lesbar. Sie können Regex verwenden, das wahrscheinlich ein wenig schneller ist, aber einen schlechten Stil hätte (schwer zu debuggen, schwer zu lesen).
EDIT: Das ist wirklich schwierig, weil die von Ihnen erwähnte Seite kein gültiges HTML ist (siehe validator.w3.org). Vor allem Tags ohne öffnende / schließende Tags sind schwer im Weg.
Es sieht so aus, als ob xmlstarlet ( Ссылка (tolles Werkzeug)) das Problem reparieren könnte (run xmlstarlet fo -R). xmlstarlet kann auch xpath- und xslt-Skripte ausführen, die Ihnen beim Extrahieren Ihrer Daten mit einem einfachen Shell-Skript helfen.
Die Effizienz einer Regex ist einem DOM-Parser überlegen.
Sehen Sie sich diesen Vergleich an:
Sie können viel mehr im Internet finden.
Tags und Links python regex beautifulsoup html-parsing