Нужна помощь в разборе HTML в Python3, недостаточно хорошо сформирован для xml.etree.ElementTree - PullRequest
3 голосов
/ 13 февраля 2011

Я постоянно получаю ошибочные теги повсюду. Я не уверен, почему именно, это текст на домашней странице Craigslist, который выглядит хорошо для меня, но я не просмотрел его достаточно тщательно. Может быть, есть что-то более прощающее, что я мог бы использовать, или это мой лучший выбор для разбора html со стандартной библиотекой?

Ответы [ 3 ]

4 голосов
/ 13 февраля 2011

Несоответствующие ошибки тегов, вероятно, вызваны несовпадающими тегами. Браузеры известны тем, что они принимают небрежный html, и они позволяют кодировщикам веб-страниц писать плохо сформированные html, так что их много. Нет оснований полагать, что список рассказов должен быть защищен от плохих дизайнеров веб-страниц.

Вам необходимо использовать грамматику, которая учитывает эти несоответствия. Если используемый вами синтаксический анализатор не позволит вам переопределить грамматику соответствующим образом, вы застряли. (Для этого может быть лучшая библиотека Python, но я этого не знаю).

Одной из альтернатив является запуск веб-страницы с помощью такого инструмента, как Tidy, который устраняет такие несоответствия, а затем запускает на этом анализатор.

1 голос
/ 13 февраля 2011

Лучшая библиотека для разбора непредсказуемого HTML - BeautifulSoup .Вот цитата со страницы проекта:

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

Так же, как и этот синтаксический анализатор.

Однако для Python 3 он не очень хорошо поддерживается,больше информации об этом в конце ссылки.

0 голосов
/ 13 февраля 2011

Синтаксический анализ HTML - непростая проблема, использование библиотек, безусловно, является решением. Две общие библиотеки для разбора HTML, которые плохо сформированы, это BeautifulSup и lxml.

lxml поддерживает Python 3, а его анализатор HTML хорошо обрабатывает непредсказуемый HTML. Это удивительно и быстро, а также использует c-библиотеки внизу. Я очень рекомендую это.

BeautifulSoup 3.1 поддерживает Python 3, но также считается неудачным экспериментом ", и вам говорят, что его нельзя использовать, поэтому на практике BeautifulSoup пока не поддерживает Python 3, оставляя lxml в качестве единственной альтернативы.

...