Разбор HTML - Получить внутренние теги HTML - PullRequest
1 голос
/ 05 мая 2009

Когда я анализирую HTML, я хочу получить только самые внутренние теги для всего документа. Мое намерение состоит в том, чтобы семантически разобрать данные из документа HTML.

Так что, если у меня есть немного HTML, как это

<html>
     <table>
           <tr><td>X</td></tr>
           <tr><td>Y</td></tr>
     </table>
</html>

Я хочу <td>X</td> и <td>Y</td> в одиночку. Возможно ли это с помощью Beautiful Soup или lxml?

Ответы [ 4 ]

3 голосов
/ 05 мая 2009

В .NET я использовал библиотеку HtmlAgilityPack для упрощения анализа html. Он загружает DOM, и вы можете выбирать по узлам, в вашем случае выберите узлы без дочерних элементов. Может быть, это помогает.

2 голосов
/ 05 мая 2009

Убедившись, что ваш документ правильно сформирован (например, проанализировав его с помощью lxml), вы можете использовать XPath для запроса всех узлов, у которых нет дочерних элементов.

//*[count(*) = 0]
0 голосов
/ 05 мая 2009

Если вы можете использовать обработку DOM или (например, в браузере), вы можете работать с атрибутом parentNode для всех тегов, рекурсивно считать сумму и сохраняйте самый большой из них.

В псевдокоде javascript (проверено на FireFox):

var allElements = document.getElementsByTagName("*");
var maxElementReference, maxParentNodeCount = 0;
var i;

for (i = 0; i < allElements.length; i++) {

    var count = recursiveCountParentNodeOn(allElements[i]);

    if (maxParentNodeCount < count) {
        maxElementReference = allElements[i];
        maxParentNodeCount = count;
    }
}
0 голосов
/ 05 мая 2009

Это одна из немногих ситуаций, когда вы можете использовать регулярное выражение для анализа строки HTML.

\<(\w+)[^>]*>[^\<]*\</\1\s*>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...