Существуют так многие HTML и xml библиотеки, встроенные в Python, что трудно полагать, что нет никакой поддержки реального парсинга HTML.
Я нашел много больших сторонних библиотек для этой задачи, но этот вопрос о библиотеке стандарта Python.
Требования:
)Hello, World!
)Бонусные очки:
does anyone here know
Вот мое 90%-е решение, согласно просьбе. Это работает на ограниченный набор HTML, который я попробовал, но как все могут явно видеть, это не точно устойчиво. Так как я сделал это, уставившись на документы в течение 15 минут и одну строку кода, я думал, что смогу консультироваться с stackoverflow сообществом для подобного, но лучшего решения...
from xml.etree.ElementTree import fromstring
DOM = fromstring("%s" % html.replace(' ', ' '))
Надежный синтаксический анализ HTML - относительно современная разработка (как ни странно это может показаться). В итоге в стандартной библиотеке точно ничего нет. HTMLParser может показаться способом обработки HTML, но это не так - он не работает во многих очень распространенных HTML, и хотя вы можете обойти эти ошибки, всегда будет другой случай, о котором вы не думали (если вам действительно удается справиться с каждой ошибкой, вы в основном воссоздаете BeautifulSoup).
На самом деле существует только 3 разумных способа синтаксического анализа HTML (как он находится в Интернете): lxml.html , BeautifulSoup и html5lib . lxml на сегодняшний день является самым быстрым, но его может быть немного сложно установить (и невозможно в такой среде, как App Engine). html5lib основан на том, как HTML 5 определяет синтаксический анализ; хотя на практике он похож на два других, возможно, он более «правильный» в том, как он анализирует сломанный HTML (все они анализируют довольно хороший HTML одинаково). Все они неплохо справляются с синтаксическим анализом сломанного HTML. BeautifulSoup может быть удобным, хотя я считаю его API излишне необычным.
Возьмите исходный код BeautifulSoup и скопируйте его в свой скрипт ;-) Я шучу ... все, что вы могли бы написать, что могло бы сделать эту работу, было бы больше или меньше дублировать функциональность, которая уже существует в подобных библиотеках.
Если это действительно не сработает, я должен спросить, почему так важно, чтобы вы использовали только стандартные библиотечные компоненты?
не соответствует вашим требованиям только к std, но beautifulsoup хорош
Я не могу вспомнить ни одного популярного языка с хорошей, надежной, эвристической библиотекой синтаксического анализа HTML в его stdlib. У Python, конечно же, его нет, и я думаю, вы это знаете.
Почему требуется модуль stdlib? В большинстве случаев, когда я слышу, что люди выдвигают это требование, они поступают глупо. Для большинства основных задач вам понадобится сторонний модуль или потратить целую работу на его повторное внедрение. Введение зависимости - это хорошая вещь, поскольку эту работу вам не нужно делать.
Итак, вам нужен lxml.html
. Отправьте lxml вместе со своим кодом, если это проблема, и в этот момент он становится функционально эквивалентным написанию его самостоятельно, за исключением сложности, ошибок и ремонтопригодности.
Вы можете изменить свои требования или дублировать всю работу, проделанную разработчиками сторонних модулей.
Красивый суп состоит из одного файла python с примерно 2000 строк кода, если это слишком большая зависимость, тогда продолжайте и напишите свой собственный, он не будет работать так же хорошо и, вероятно, не будет целым намного меньше.