Вопрос

У меня есть HTML-файл (закодированный в UTF-8). Я открываю это с codecs.open(). Анкет Архитектура файла:

<html>
// header
<body>
  // some text
  <table>
    // some rows with cells here
    // some cells contains tables
  </table>
  // maybe some text here
  <table>
    // a form and other stuff
  </table>
  // probably some more text
</body></html>

Мне нужно получить только первую таблицу (отбросить одну с формой). Опустите весь ввод раньше <table> и после соответствующего </table>. Анкет Некоторые ячейки содержит также параграфы, жирные шрифты и сценарии. Там нет более одной вложенной таблицы на строку основной таблицы.

Как я могу извлечь его, чтобы получить список строк, где каждый элемент содержит данные ячейки (строка Unicode) и список строк для каждой вложенной таблицы? Там нет более 1 уровня гнездования.

Я попробовал HTMLParse, Pyparse и RE -модуль, но не могу работать. Я довольно новичок в Python.

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

Решение

Пытаться Красивый суп

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

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

Вам может понравиться LXML. Анкет Я не уверен, что действительно понял, что вы хотите делать с этой структурой, но, возможно, этот пример поможет ...

import lxml.html

def process_row(row):
    for cell in row.xpath('./td'):
       inner_tables = cell.xpath('./table')
       if len(inner_tables) < 1:
           yield cell.text_content()
       else:
           yield [process_table(t) for t in inner_tables]

def process_table(table):
    return [process_row(row) for row in table.xpath('./tr')]

html = lxml.html.parse('test.html')
first_table = html.xpath('//body/table[1]')[0]

data = process_table(first_table))

Если HTML хорошо сформирован, вы можете проанализировать его в дерево DOM и использовать XPath для извлечения таблицы, которую вы хотите. Я обычно использую LXML для анализа XML, и он также может проанализировать HTML.

XPath для вытягивания первой таблицы будет "// таблица [1].

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top