Python 如何从HTML中提取嵌套表?

Python 如何从HTML中提取嵌套表?,python,html,html-table,extract,Python,Html,Html Table,Extract,我有一个HTML文件(用utf-8编码)。我用编解码器打开它。open()。文件体系结构是: <html> // header <body> // some text <table> // some rows with cells here // some cells contains tables </table> // maybe some text here <table> // a f

我有一个HTML文件(用utf-8编码)。我用
编解码器打开它。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>

//标题
//一些文本
//这里有一些带单元格的行
//某些单元格包含表格
//也许这里有一些文字
//表格和其他东西
//可能还要一些文字
我只需要检索第一个表(丢弃带有表单的表)。省略第一个
之前和相应
之后的所有输入。某些单元格还包含段落、粗体和脚本。主表的每行不超过一个嵌套表

如何提取它以获得行列表,其中每个元素保存普通(unicode字符串)单元格的数据和每个嵌套表的行列表?嵌套的级别不超过1级

我尝试了HTMLParse、PyParse和re模块,但无法实现。 我对Python很陌生。

试试看


原则上,您需要使用真正的解析器(Beaut.Soup就是这样),由于计算机科学的原因(有限状态机无法解析上下文无关语法,IIRC),正则表达式无法处理嵌套元素。

如果HTML格式良好,您可以将其解析为DOM树,并使用XPath提取所需的表。我通常用于解析XML,以及

拉出第一个表的XPath是“//table[1]”。我不确定我真的理解了你想用这个结构做什么,但是这个例子可能会有帮助

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))
import lxml.html
def过程_行(行):
对于第.xpath行('./td')中的单元格:
内部表格=cell.xpath('./表格')
如果len(内表)<1:
产量单元格。文本_内容()
其他:
产量[内表中t的工艺表(t)]
def过程_表(表):
返回[process_table.xpath('./tr')中的行的行(行)]
html=lxml.html.parse('test.html')
first_table=html.xpath('//body/table[1]')[0]
数据=过程表(第一个表))

此问题的“regex”标记表示错误的解决方案-HTML语法不规则,regexp可能给出错误的结果。谢谢您的回答。看起来它会解决我的问题:)我花了半个晚上试图理解B汤。确实如此,这对我来说很好。再次感谢!(几个月后)只要我活下来,这就是我需要的食谱