2017-11-23 4 views
0

Ich benutze BeautifulSoup, um HTML über lxml Parser zu analysieren. Aber ich stieß auf eine Datei, die keine schließenden Tags in einem <table> hat:Handle fehlerhafte HTML (keine schließenden Tags)

<table id='reportTable' class='report-table' style='width:auto' cellspacing='0'><tr> 
<th>Номер<br>поезда<th>Дата<br>отправления<th>Маршрут<th>Причина<th>Комментарий<th>Станция ... 

Obwohl die <table> Tag richtig geschlossen ist.

+1

Versuchen Sie es bereits ohne Erfolg zu analysieren? Der halbe Punkt eines HTML-Parsers ist, dass er schlecht formatierte HTML genauso tolerieren kann wie ein Browser. Fehlende schließende Tags sollten kein Problem darstellen. –

+0

@C.Feenstra erkennt einige 'td's, scheitert aber oft daran, sich zu teilen. Ich werde versuchen, eine Beispieldatei später – Winand

Antwort

0

Persönlich bin ich auf dieses Problem selbst gestoßen und ich führe das ganze Dokument durch HTMLTidy 5 mit tidylib. Wenn ich sage, dass ich mit C. Feenstra einverstanden bin, kann der lxml-Parser fehlerhaftes HTML tolerieren. Wenn Sie HTML erhalten haben, die Sie wirklich nicht dann mit lxml Parsern analysieren können dies versuchen:

from tidylib import tidy_document 

badHtml = "<table id='reportTable' class='report-table' style='width:auto' cellspacing='0'><tr><th>Номер<br>поезда<th>Дата<br>отправления<th>Маршрут<th>Причина<th>Комментарий<th>Станция ..." 
options = {"output-bom": 0, "quiet": False, "word-2000": True, 
      "output-encoding": 'utf8', "output-xhtml": 1, "add-xml-decl": 0, 
      "tidy-mark": 0, "drop-proprietary-attributes": True, 
      "show-warnings": False, } 
tidiedHtml, errors = tidy_document(badHtml, options) 

Dann nutzen „tidiedHtml“ für BeautifulSoup

+0

Das funktioniert, danke! Ich habe "pytidylib" und auch "tidy.dll" von http://binaries.html-tidy.org installiert. Meine Eingabecodierung ist 'cp1251', also musste ich Rohdaten zu 'utf-8' vorcodieren – Winand

Verwandte Themen