Python BS: выборка строк с атрибутом цвета и без него - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть html, который выглядит следующим образом (это представляет строки данных в таблице, то есть данные между tr и / tr - это одна строка в таблице)

<tr bgcolor="#f4f4f4">
<td height="25" nowrap="NOWRAP">&nbsp;CME_ES&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;07:58:46&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;Connected&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;0&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;0&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;0&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;0&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;07:58:00&nbsp;</td>
**<td height="25" nowrap="NOWRAP" bgcolor="#55aa2a">&nbsp;--:--:--&nbsp;</td>**
<td height="25" nowrap="NOWRAP">&nbsp;0&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;0&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;01:25:00 &nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp; 22:00:00&nbsp;</td>
</tr>
.
.
.
<tr bgcolor="#ffffff">
<td height="25" nowrap="NOWRAP">&nbsp;CME_NQ&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;07:58:46&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;Connected&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;0&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;0&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;191&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;0&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;07:58:01&nbsp;</td>
**<td height="25" nowrap="NOWRAP">&nbsp;--:--:--&nbsp;</td>**
<td height="25" nowrap="NOWRAP">&nbsp;0&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;0&nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp;01:25:00 &nbsp;</td>
<td height="25" nowrap="NOWRAP">&nbsp; 22:00:00&nbsp;</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, она все равно была добавлена ​​в список как NULL или N / A?

Полезно знать, чтоbgcolor attr (который может присутствовать или не присутствовать) всегда будет отображаться в 9-й строке набора, независимо от того, имеет ли эта строка атрибут или нет (посмотрите на строки html, заключенные в **)

EDIT: Outputдолжен выглядеть следующим образом (список всех атрибутов цвета из строки 9 каждого набора строк и отображать 'N / A', если отсутствует атрибут цвета):

['#55aa2a',...,'N/A'] 

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Я понял, как решить эту проблему, хотя и довольно долго, но тем не менее решил проблему

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'

БОЛЬШОЕ ПРИЗНАНИЕ, если можно выяснить, как сократить этот подход, хотя :)!

0 голосов
/ 29 ноября 2018

Вы можете добавить оператор 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...