为了账号安全,请及时绑定邮箱和手机立即绑定

Python解决方案,可将HTML表转换为可读的纯文本

Python解决方案,可将HTML表转换为可读的纯文本

慕仙森 2021-03-02 21:14:02
我正在寻找一种将HTML表完全转换为可读的纯文本的方法。即给出输入:<table>    <tr>        <td>Height:</td>        <td>200</td>    </tr>    <tr>        <td>Width:</td>        <td>440</td>    </tr></table>我期望输出:Height: 200Width: 440我宁愿不使用外部工具,例如w3m -dump file.html,因为它们是(1)依赖于平台的,(2)我想对过程进行一些控制,并且(3)我认为它可以单独使用Python(带有或不带有额外模块)都是可行的。我不需要任何自动换行或可调整的单元格分隔符宽度。使用制表符作为单元格分隔符就足够了。
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

如何使用这个:


解析HTML表到Python列表?


但是,请使用collections.OrderedDict()而不是简单的字典来保留顺序。有了字典后,从字典中获取文本并设置其格式非常非常容易:


使用@Colt 45的解决方案:


import xml.etree.ElementTree

import collections


s = """\

<table>

    <tr>

        <th>Height</th>

        <th>Width</th>

        <th>Depth</th>

    </tr>

    <tr>

        <td>10</td>

        <td>12</td>

        <td>5</td>

    </tr>

    <tr>

        <td>0</td>

        <td>3</td>

        <td>678</td>

    </tr>

    <tr>

        <td>5</td>

        <td>3</td>

        <td>4</td>

    </tr>

</table>

"""


table = xml.etree.ElementTree.XML(s)

rows = iter(table)

headers = [col.text for col in next(rows)]

for row in rows:

    values = [col.text for col in row]

    for key, value in collections.OrderedDict(zip(headers, values)).iteritems():

        print key, value

输出:


Height 10

Width 12

Depth 5

Height 0

Width 3

Depth 678

Height 5

Width 3

Depth 4


查看完整回答
反对 回复 2021-03-26
  • 3 回答
  • 0 关注
  • 472 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号