とアンカータグとTBODYを解析これは、を参照している - Iterate over python dictionary to retrieve only required rows私のHTMLは以下のように外部アプリケーションによってフォーマットされているElementTreeの
- 私はコード以下
from xml.etree import ElementTree as ET
s = """<table class="darshan" style="width: 290px;">
<thead>
<tr>
<th style="background-color: #efefef; width: 55px;">Release</th>
<th style="background-color: #efefef; width: 63px;">REFDB</th>
<th style="background-color: #efefef; width: 151px;">URL</th>
</tr>
</thead>
<tbody>
<tr>
<td style="width: 55px;">3.7.3</td>
<td style="width: 63px;">
<p>12345</p>
<p>232323</p>
<p>4343454</p>
<p>5454554</p>
</td>
<td style="width: 151px;">
<p><a class="jive-link-external-small" href="http://google.com" rel="nofollow">http://google.com</a>
</p>
<p><a class="jive-link-external-small" href="http://test12213.com" rel="nofollow">http://test12213.com</a>
</p>
</td>
</tr>
<tr>
<td style="width: 55px;">3.7.4</td>
<td style="width: 63px;">
<p>456789</p>
<p>54545</p>
<p>5454545</p>
<p>545454</p>
</td>
<td style="width: 151px;"><a class="jive-link-external-small" href="http://foo.com" rel="nofollow">http://foo.com</a>
</td>
</tr>
</tbody>
</table>
"""
def find_version(ver):
table = ET.XML(s)
rows = iter(table)
headers = [col.text for col in next(rows)]
for row in rows:
values = [col.text for col in row]
out = dict(zip(headers, values))
if out['Release'] == ver:
return out
return None
res = find_version('3.7.3')
if res:
for x in res.items():
print(' - '.join(x))
else:
print ('Version not found')
Iと、このHTML入力を処理するとき 出力を下回る:
trs: [<Element 'th' at 0x0431CDE0>, <Element 'th' at 0x0431CE40>, <Element 'th' at 0x0431CEA0>]
ths: []
tds: []
out: OrderedDict()
Traceback (most recent call last):
File "parse_html.py", line 141, in <module>
res = find_version(ver)
File "parse_html.py", line 136, in find_version
if out['Release'] == ver:
KeyError: 'Release'
使用 'プリントを()'使用して、より読みやすいです。間違いを見つけるのに役立ちます。 – furas
@furas - 元の質問のあなたの要求に従ってHTMLを更新しました。 – vpd