2009-07-18 2 views
0

Я пытаюсь извлечь некоторые данные с различных HTML-страниц, используя программу python. К сожалению, некоторые из этих страниц содержат введенные пользователем данные, которые иногда имеют «небольшие» ошибки, а именно несоответствие тегов.Python xml.dom и плохой XML

Есть ли хороший способ для xml.dom в python попытаться исправить ошибки или что-то в этом роде? В качестве альтернативы, есть ли лучший способ извлечь данные из HTML-страниц, которые могут содержать ошибки?

ответ

3

Вы можете использовать HTML Tidy для очистки, или Beautiful Soup для разбора. Может быть, вам нужно сохранить результат в временном файле, но он должен работать.

Приветствия,

+0

Beautiful Soup не так уж велик. – Geo

+0

Я думаю, это зависит от того, что вы хотите. – Boldewyn

0

Я имел обыкновение использовать BeautifulSoup для таких задач, но теперь я переместился в HTML5lib (http://code.google.com/p/html5lib/), который хорошо работает во многих случаях, когда BeautifulSoup терпит неудачу

Другой альтернативой является использование "Element Soup "(http://effbot.org/zone/element-soup.htm), который является оберткой для Beautiful Soup с использованием ElementTree

0

lxml делает приличную работу при анализе недействительного HTML.

В соответствии с их документацией Beautiful Soup и html5lib иногда работают лучше в зависимости от ввода. С помощью lxml вы можете выбрать, какой синтаксический анализатор использовать, и получить к ним доступ через унифицированный API.

0

Если jython вам подходит, tagoup очень хорош при разборе мусора - если это так, я нашел библиотеки jdom намного проще в использовании, чем другие альтернативы xml.

Это фрагмент из демо-макета сделать с экраном выскабливания от поездки планировщик TFL в:

 
private Document getRoutePage(HashMap params) throws Exception { 
     String uri = "http://journeyplanner.tfl.gov.uk/bcl/XSLT_TRIP_REQUEST2"; 
     HttpWrapper hw = new HttpWrapper(); 
     String page = hw.urlEncPost(uri, params); 
     SAXBuilder builder = new SAXBuilder("org.ccil.cowan.tagsoup.Parser"); 
     Reader pageReader = new StringReader(page); 
     return builder.build(pageReader); 
    } 
Смежные вопросы