我正在尝试使用Python解析html文件,而不使用任何外部模块。原因是我正在触发jenkins作业,并遇到了lxml和BeautifulSoup的一些导入问题(试图解决该问题,我认为我在进行工程设计的某个方面来完成我的工作)
输入 :
<tr class="test"> <td class="test"> <a href="a.html">BA</a> </td> <td class="duration"> 0.000s </td> <td class="zero number">0</td> <td class="zero number">0</td> <td class="zero number">0</td> <td class="passRate"> N/A </td> </tr> <tr class="test"> <td class="test"> <a href="o.html">Aa</a> </td> <td class="duration"> 0.000s </td> <td class="zero number">0</td> <td class="zero number">0</td> <td class="zero number">0</td> <td class="passRate"> N/A </td> </tr> <tr class="test"> <td class="test"> <a href="g.html">VideoAds</a> </td> <td class="duration"> 0.390s </td> <td class="zero number">0</td> <td class="zero number">0</td> <td class="zero number">0</td> <td class="passRate"> N/A </td> </tr> <tr class="suite"> <td colspan="2" class="totalLabel">Total</td> <td class="zero number">271</td> <td class="zero number">0</td> <td class="zero number">3</td> <td class="passRate suite"> 98% </td> </tr>
输出 :
我想使用“ suite”类(末尾检查)来获取tr标记的特定块,然后提取零号,零号,零号和passRate套件的值。最后,打印值。
~~~~~~
例如。零数= 271 …
通过率= 98%
~~~~~这是我尝试使用lxml的内容:
tree = parse(HTML_FILE) tds = tree.xpath("//tr[@class='suite']//td/text()") val = map(str.strip, tds)
这在本地可行,但是我真的想做一些没有任何外部依赖项的事情。我应该使用strip()还是使用os.path.isFile()打开文件。我可能不正确,但是建议/指导我完成此操作的解决方案。
对于一个元素,您可以尝试使用re模块甚至字符串函数。
re
data = '''<tr class="test"> <td class="test"> <a href="no.html">track</a></td> <td class="duration">0.390s</td> <td class="zero number">0</td> <td class="zero number">0</td> <td class="zero number">0</td> <td class="passRate">N/A</td></tr> <tr class="suite"> <td colspan="2" class="totalLabel">Total</td> <td class="passed number">271</td> <td class="zero number">0</td> <td class="failed number">3</td> <td class="passRate suite">98%</td> </tr>''' # re module import re print(re.search('suite">(\d+)%', data).group(1)) # string functions before = 'passRate suite">' after = '%' start = data.find(before) + len(before) stop = data.find(after, start) print(data[start:stop])
编辑:与获取其他值 re
import re print('passed:', re.search('passed number">(\d+)', data).group(1)) print('zero:', re.search('zero number">(\d+)', data).group(1)) print('failed:', re.search('zero number">(\d+)', data).group(1)) print('Rate:', re.search('suite">(\d+)', data).group(1)) passed: 271 zero: 0 failed: 0 Rate: 98