【发布时间】:2016-05-16 20:46:40
【问题描述】:
我想在剥离标签后分配 HTML 的内容。这是我最初从中删除标签的 html:
<tr class="suite">
<td colspan="2" class="totalLabel">Total</td>
<td class="zero number">0</td>
<td class="skipped number">4</td>
<td class="zero number">0</td>
<td class="passRate suite">
0%
</td>
</tr>
使用正则表达式剥离标签的方法:
import re
import os
if os.path.isfile(some_html_file):
with open(some_html_file) as f:
data = f.read()
before = '<td colspan="2" class="totalLabel">Total</td>'
after = '</tr>'
start = data.find(before) + len(before)
stop = data.find(after, start)
d = data[start:stop]
def stripHTMLTags (html):
text = html
rules = [
{ r'>\s+' : u'>'}, # remove spaces after a tag opens or closes
{ r'\s+' : u' '}, # replace consecutive spaces
{ r'[ \t]*<[^<]*?/?>' : u'' }, # remove remaining tags
{ r'^\s+' : u'' } # remove spaces at the beginning
]
for rule in rules:
for (k,v) in rule.items():
regex = re.compile (k)
text = regex.sub (v, text)
return text
print stripHTMLTags(d)
这是我得到的输出:0400%
但是,我想将每个 HTML td 标记的内容分配给变量 所以,我预期的最终输出将是:
A = 0
B = 4
C = 0
D = 0%
分配这些变量的最佳方法是什么?另外,有没有一种方法可以组合正则表达式的规则并使用更简单的正则表达式命令形式?其他使用正则表达式的方法会有所帮助。
【问题讨论】:
-
如果你想利用 HTML 结构,不要剥离 HTML。使用 HTML 解析库解析它。
-
我还在学习如何解析事物?有没有办法可以指导我如何使用 HTML 解析库来解决像我这样的问题?
-
@BrenBarn 使用正则表达式对我来说很重要 - 因为我将在 jenkins 上运行这样的脚本并使用外部依赖项(BeautifulSoup,lxml)将涉及影响我所有从属机器并获得它的开销在这种情况下,使用正则表达式会很有帮助。
-
@BrenBarn:根据我想要实现的目标,正则表达式会非常有帮助 - 请参阅上面的我的 cmets
标签: python html regex parsing html-parsing