python - 识别rowspan和colspan:使用漂亮汤的html表格
问题描述
我遇到了美丽的汤模块和重新模块的问题。我正在尝试编写一个自动将 HTML 代码转换为乳胶代码的 python 脚本。要绘制表格,我必须首先阅读 HTML 代码中的各种表格属性,例如rowspan
和colspan
。这是我的 HTML 代码表:
<html>
<body>
<table border = "1">
<tr>
<td>Name</td>
<td colspan="2">Alice</td>
</tr>
<tr>
<td>Type</td>
<td colspan="2">Client</td>
</tr>
<tr>
<td rowspan="3">Parameters</td>
<td>Param1</td>
<td>Value</td>
</tr>
<tr>
<td>Param2</td>
<td>Value</td>
</tr>
<tr>
<td>Param3</td>
<td>Value</td>
</tr>
</html>
首先,我必须找到colspan
并rowspan
出现在哪里。我编写了以下脚本来做到这一点:
import re
from bs4 import BeautifulSoup
with open('table.html')as file:
soup = BeautifulSoup(file, 'lxml')
for table in soup.find_all("tr"):
for item in table.find_all('td'):
row = re.findall(r'rowspan="[0-255]"', str(item))
col = re.findall(r'colspan="[0-255]"', str(item))
print(row)
print(col)
输出是:
[]
[]
[]
['colspan="2"']
[]
[]
[]
['colspan="2"']
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[Finished in 1.622s]
我很好colspan
。但不行rowspan
。在我的 HTML 代码的第 13 行,我有rowspan
. 为什么它不在我的输出中?请帮忙。
解决方案
这里的问题在于正则表达式。
rowspan="[0-255]"
这里 0-2 一个介于 0 到 2 和 55 之间的单个字符匹配列表 5 中的单个字符(区分大小写)。所以这个正则表达式只能匹配
rowspan="0"
rowspan="1"
rowspan="2"
rowspan="5"
您还可以使用该HTMLParser
模块来解析标签属性。(它是标准库的一部分)
>>> from html.parser import HTMLParser
>>>
>>> class MyParser(HTMLParser):
... def __init__(self, *args, **kwargs):
... self.results = []
... super(MyParser, self).__init__(*args, **kwargs)
... def handle_starttag(self, tag, attrs):
... if tag == "td":
... for attr, value in attrs:
... if ("colspan" == attr) or ("rowspan" == attr):
... self.results.append("{}=\"{}\"".format(attr, value))
...
>>> parser = MyParser()
>>>
>>> parser.feed(
... """
... <html>
... <body>
... <table border = "1">
... <tr>
... <td>Name</td>
... <td colspan="2">Alice</td>
... </tr>
... <tr>
... <td>Type</td>
... <td colspan="2">Client</td>
... </tr>
... <tr>
... <td rowspan="3">Parameters</td>
... <td>Param1</td>
... <td>Value</td>
... </tr>
... <tr>
... <td>Param2</td>
... <td>Value</td>
... </tr>
... <tr>
... <td>Param3</td>
... <td>Value</td>
... </tr>
... </html>
... """
... )
>>>
>>> print(parser.results)
['colspan="2"', 'colspan="2"', 'rowspan="3"']
推荐阅读
- git - 用于下载和更新本地工作副本的 git 术语
- sql - 跨多个表选择条件布尔值
- pyinstaller - pyinstaller:创建一个可执行文件
- r - Keras 中一维卷积的展平层
- sql-server - 再次递归 tsql sql 优化
- python - 如何继承 Django 变量?
- linux - 父进程终止时脚本死亡
- python - 如何从python字典中提取列表中的项目
- jquery - ASP.NET Web 窗体 - 在 jQuery 对话框内的页面回发上查看状态错误
- angularjs - 带有 TypeScript $resource 错误的 AngularJS:“响应与配置的参数不匹配”