我有一些看起来像这样的html(表示表中的数据行,即 tr 和 / tr 之间的数据是表中的一行)
<tr bgcolor="#f4f4f4">
<td height="25" nowrap="NOWRAP"> CME_ES </td>
<td height="25" nowrap="NOWRAP"> 07:58:46 </td>
<td height="25" nowrap="NOWRAP"> Connected </td>
<td height="25" nowrap="NOWRAP"> 0 </td>
<td height="25" nowrap="NOWRAP"> 0 </td>
<td height="25" nowrap="NOWRAP"> 0 </td>
<td height="25" nowrap="NOWRAP"> 0 </td>
<td height="25" nowrap="NOWRAP"> 07:58:00 </td>
**<td height="25" nowrap="NOWRAP" bgcolor="#55aa2a"> --:--:-- </td>**
<td height="25" nowrap="NOWRAP"> 0 </td>
<td height="25" nowrap="NOWRAP"> 0 </td>
<td height="25" nowrap="NOWRAP"> 01:25:00 </td>
<td height="25" nowrap="NOWRAP"> 22:00:00 </td>
</tr>
.
.
.
<tr bgcolor="#ffffff">
<td height="25" nowrap="NOWRAP"> CME_NQ </td>
<td height="25" nowrap="NOWRAP"> 07:58:46 </td>
<td height="25" nowrap="NOWRAP"> Connected </td>
<td height="25" nowrap="NOWRAP"> 0 </td>
<td height="25" nowrap="NOWRAP"> 0 </td>
<td height="25" nowrap="NOWRAP"> 191 </td>
<td height="25" nowrap="NOWRAP"> 0 </td>
<td height="25" nowrap="NOWRAP"> 07:58:01 </td>
**<td height="25" nowrap="NOWRAP"> --:--:-- </td>**
<td height="25" nowrap="NOWRAP"> 0 </td>
<td height="25" nowrap="NOWRAP"> 0 </td>
<td height="25" nowrap="NOWRAP"> 01:25:00 </td>
<td height="25" nowrap="NOWRAP"> 22:00:00 </td>
</tr>
我有从每个行集中获取颜色的代码:
mrkt_stat = []
for td in site.findAll('td'):
if 'bgcolor' in td.attrs:
mrkt_stat.append(td.attrs['bgcolor'])
问题是,当行集没有 bgcolor 属性时,没有数据添加到 mrkt_stat 列表中。
我该如何抓取它,以便即使一行没有bgcolor attr,它仍将以NULL或N / A的形式添加到列表中?
知道bgcolor attr(可能存在或可能不存在)将始终出现在行的第9行中是很有用的,无论该行是否具有attr(请查看用**括起来的html行) )
编辑:输出应类似于以下内容(每行集第9行的所有颜色属性的列表,如果不存在颜色属性,则显示'N / A'):
['#55aa2a',...,'N/A']
答案 0 :(得分:0)
您可以在else
语句中添加一个if
语句:
mrkt_stat = []
for td in site.findAll('td'):
if 'bgcolor' in td.attrs:
mrkt_stat.append(td.attrs['bgcolor'])
else:
mrkt_stat.append('N/A')
答案 1 :(得分:0)
尽管有很长的路要走,我还是想出了解决方法,但是仍然可以解决问题
keys = []
for tr in site.find_all('br'):
for td in site.find_all('tr'):
if td in keys:
pass
else:
keys.append(td)
del keys[:4]
for i in range(0, len(keys)):
g = keys[i]
color = []
for line in g:
color.append(line)
del color[:17]
check = []
h = color[0]
if 'bgcolor' in h.attrs:
check.append(h['bgcolor'])
else:
check.append('N/A')
要总结到h = color[0]
行,我将行集的第9行存储到变量h
中,然后检查bgcolor是否在此标记的属性中。如果是,它将被添加到check
列表中,否则将被添加到'N/A'
非常感谢您能弄清楚如何缩短这种方法:)!