Вопрос

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

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

Это было полезно?

Решение

Вы могли бы использовать HTML Аккуратный чтобы привести себя в порядок, или Прекрасный Суп для разбора.Возможно, вам придется сохранить результат во временный файл, но это должно сработать.

Ваше здоровье,

Другие советы

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

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

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

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

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

Это фрагмент демонстрационного макета, предназначенного для очистки экрана из tfl journey planner:

 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);
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top