Frage

Ich bin ganz neu in Python, und ich brauche etwas Hilfe mit der Syntax für die Suche nach und lxml mit HTML-Tags Iterieren durch. Hier sind die Anwendungsfälle beschäftige ich mich mit:

HTML-Datei ist ziemlich gut gebildet (aber nicht perfekt). Hat mehrere Tabellen auf dem Bildschirm, man eine Gruppe von Suchergebnissen, und jeweils für eine Kopf- und Fußzeile enthält. Jede Ergebniszeile enthält einen Link für das Suchergebnis Detail.

  1. Ich brauche die mittlere Tabelle mit den Suchergebniszeilen (dies konnte ich herausfinden) zu finden:

        self.mySearchTables = self.mySearchTree.findall(".//table")
        self.myResultRows = self.mySearchTables[1].findall(".//tr")
    
  2. Ich brauche die Links in dieser Tabelle enthaltenen finden (das ist, wo ich stecken):

        for searchRow in self.myResultRows:
            searchLink = patentRow.findall(".//a")
    

    Es scheint nicht, um tatsächlich die Verbindungselemente zu finden.

  3. Ich brauche den Klartext des Links. Ich stelle mir es so etwas wie searchLink.text wäre, wenn ich tatsächlich die Verbindungselemente in dem ersten Platz.

Schließlich wird in der aktuellen API-Referenz für lxml, war ich nicht in der Lage Informationen über die Entdeckung und die findall Anrufe zu finden. Ich gewonnenen diese von Bits von Code, den ich auf Google gefunden. Fehle ich etwas darüber, wie effektiv zu finden und über HTML-Tags lxml iterieren?

War es hilfreich?

Lösung

Okay, erstens, in Bezug auf die HTML-Parsing: Wenn Sie die Empfehlung von zweiterlinde und S.Lott mindestens verwenden Sie die Version von beautifulsoup enthalten mit lxml . Auf diese Weise werden Sie auch in den Genuss einer schönen XPath oder CSS-Selektor-Schnittstelle ernten.

Aber ich persönlich bevor Ian Bicking HTML-Parser in lxml enthalten.

Zweitens .find() und .findall() kommen aus lxml versuchen, mit ElementTree kompatibel zu sein, und diese beiden Methoden sind in XPath-Unterstützung in ElementTree .

Diese beiden Funktionen sind recht einfach zu bedienen, aber sie sind sehr begrenzt XPath. Ich empfehle versuchen, entweder die volle lxml xpath() Methode oder zu verwenden, wenn Sie bereits vertraut mit CSS, mit dem cssselect() Methode .

Hier sind einige Beispiele, mit einer HTML-Zeichenfolge wie folgt analysiert:

from lxml.html import fromstring
mySearchTree = fromstring(your_input_string)

, um den CSS-Selektor-Klasse mit Ihrem Programm würde in etwa wie folgt aussehen:

# Find all 'a' elements inside 'tr' table rows with css selector
for a in mySearchTree.cssselect('tr a'):
    print 'found "%s" link to href "%s"' % (a.text, a.get('href'))

Die äquivalente XPath-Methode wäre:

# Find all 'a' elements inside 'tr' table rows with xpath
for a in mySearchTree.xpath('.//tr/*/a'):
    print 'found "%s" link to href "%s"' % (a.text, a.get('href'))

Andere Tipps

Gibt es einen Grund Sie nicht Schöne Suppe für dieses Projekt? Es wird mit unvollständig ausgebildeten Dokumenten viel einfacher zu tun.

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