Python xml.dom и плохой XML - PullRequest
       33

Python xml.dom и плохой XML

0 голосов
/ 18 июля 2009

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

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

Ответы [ 4 ]

3 голосов
/ 18 июля 2009

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

Приветствия

0 голосов
/ 19 июля 2009

Если для вас приемлем 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);
    }
0 голосов
/ 18 июля 2009

lxml неплохо справляется с анализом неверного HTML.

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

0 голосов
/ 18 июля 2009

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

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

...