Kann ich Segment ein Dokument in BeautifulSoup vor dem Konvertieren in meiner Analyse des Dokuments auf Text basiert?

StackOverflow https://stackoverflow.com/questions/866772

  •  22-08-2019
  •  | 
  •  

Frage

Ich habe einige HTML-Dateien, die ich in Text konvertieren möchten. Ich habe mit BeautifulSoup rumgespielt und machte einige Fortschritte auf dem Verständnis, wie die Anweisungen zu verwenden und html einreichen und Text zurück.

Allerdings meine Dateien haben eine Menge Text, Tabellenstrukturen formatiert werden. Zum Beispiel könnte ich einen Absatz des Textes habe, die in einem td-Tag innerhalb Reihe von Tabellen-Tags

residiert
<table>
<td> here is some really useful information and there might be other markup tags but
     this information is really textual in my eyes-I want to preserve it
 </td>
</table>

Und dann gibt es die ‚klassische Tabellen‘, die Daten innerhalb des Körpers der Tabelle haben.

Ich möchte in der Lage sein, einen Algorithmus auf die Tabelle anzuwenden und einige Regeln festgelegt, ob die Tabelle bestimmen, herausgerissen, bevor ich das Dokument in Text umwandeln.

Ich habe herausgefunden, wie die Eigenschaften meines Tabellen- zum Beispiel bekommt die Anzahl der Spalten in jeder Tabelle zu erhalten:

numbCols=[]
for table in soup.findAll('table'):
    rows=[]
    for row in table.findAll('tr'):
        columns=0
        for column in row.findAll('td'):
            columns+=1
        rows.append(columns)
    numbCols.append(rows)

so kann ich auf numbCols arbeiten und die len jedes Element in der Liste und die Werte in jedem Element in der Liste verwenden, um die Eigenschaften meiner Tabellen zu analysieren und diejenigen identifizieren ich behalten wollen oder zu verwerfen.

Ich bin nicht eine elegante Art und Weise der Verwendung dieser Informationen mit BeautifulSoup Sehen Sie den Text zu erhalten. Ich denke, was ich versuche, zu erhalten, ist nehme ich numbCols analysieren und entscheiden, dass die zehn Tabellen in einem bestimmten Dokument I 2 Tabellen ausschließen möchte, 4, 6, und 9. So ist der Teil des HTML-Dokuments enthält alles, was aber diejenigen, Tabellen. Wie kann ich meine Suppe Segment auf diese Weise?

Die Lösung, die ich mit kommen habe, ist zunächst die Position jedes der Öffnungs- und Schließtisch-Tags finditer zu identifizieren und die Spannweiten bekommen und dann die Spannweiten mit dem numbCols zippen. Ich kann dann anhand dieser Liste schnippeln und die Stücke meiner Schnur miteinander zu verbinden. Sobald dies abgeschlossen ist, kann ich dann BeautifulSoup verwenden, um die HTML in Text zu konvertieren.

Ich bin sicher, dass ich in der Lage sollte all dies in BeautifulSoup zu tun. Irgendwelche Vorschläge oder Links zu bestehenden Beispiele wäre toll. Ich sollte erwähnen, dass meine Quelldateien groß sein kann, und ich habe Tausende zu behandeln.

Haben Sie die Antwort nicht, aber ich bin immer näher

War es hilfreich?

Lösung

Man I love this Sachen Unter der Annahme, in einem naiven Fall, dass ich will alle Tabellen löschen, die alle Zeilen mit einer Spaltenlänge haben mehr als 3 Meine Antwort ist

for table in soup.findAll('table'):
    rows=[]
    for row in table.findAll('tr'):
        columns=0
        for column in row.findAll('td'):
            columns+=1
            rows.append(columns)
        if max(rows)>3:
          table.delete()

Sie können eine beliebige Verarbeitung tun können Sie auf jeder Ebene in dieser Schleife wollen, ist es nur notwendig, den Test und erhalten die richtige Instanz zu identifizieren, zu testen.

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