我正在尝试从我的Selenium Test Report html文件中提取一些数据。我从表中的一个td列中只得到1个值。 我想迭代表并打印出行和列中的值。
我的HTML代码段是:
<table id='result_table'>
<colgroup>
<col align='left' />
<col align='right' />
<col align='right' />
<col align='right' />
<col align='right' />
<col align='right' />
</colgroup>
<tr id='header_row'>
<td>Test Group/Test case</td>
<td>Count</td>
<td>Pass</td>
<td>Fail</td>
<td>Error</td>
<td>View</td>
</tr>
<tr class='passClass'>
<td>Regression_TestCase.RegressionProjectEdit_TestCase.RegressionProject_TestCase_Project_Edit</td>
<td>75</td>
<td>75</td>
<td>0</td>
<td>0</td>
<td><a href="javascript:showClassDetail('c1',75)">Detail</a></td>
</tr>
我想要的输出格式是:
Count Pass Fail Error
75 75 0 0
我的代码是:
table = soup.find('table', {'id': 'result_table'})
tr = table.find('tr', {'id': 'header_row'})
td = tr.findNext('td')
for item in td:
print td, "\t",
print "\n"
我得到的输出是:
<td>Test Group/Test case</td>
我怎样才能获得所需的输出?
谢谢Riaz
答案 0 :(得分:1)
只需按id获取表格,然后提取行并找到td标签,将第二个切换到倒数第二个:
In [40]: from bs4 import BeautifulSoup
In [41]: soup = BeautifulSoup(html, "html.parser")
# can use .find(id="result_table")
In [42]: table = soup.select_one("#result_table")
In [45]: for row in table.find_all("tr"):
....: print(" ".join([td.text for td in row.find_all("td")[1:-1]]))
....:
Count Pass Fail Error
75 75 0 0
table.find('tr', {'id': 'header_row'})
只会选择示例中的第一个tr,然后tr.findNext('td')
只能获得 header_row tr 之后的第一个td,以便这就是为什么你只看到测试组/测试用例。
另一种方法是使用 tr 的类名,假设所有有趣的行都有该类:
soup = BeautifulSoup(html, "html.parser")
table = soup.select_one("#result_table")
headers= [td.text for td in table.select_one("#header_row").find_all("td")[1:-1]]
print(" ".join(headers))
for row in table.select("tr.passClass"):
print(" ".join([td.text for td in row.find_all("td")[1:-1]]))