Красивый вопрос о супе - PullRequest
       6

Красивый вопрос о супе

1 голос
/ 11 января 2011

Я хочу получить определенные строки в документе HTML

В строках установлены следующие атрибуты: bgcolor и vallign

Вот фрагмент HTML-таблицы:

<table>
   <tbody>
      <tr bgcolor="#f01234" valign="top">
        <!--- td's follow ... -->
      </tr>
      <tr bgcolor="#c01234" valign="top">
        <!--- td's follow ... -->
      </tr>
   </tbody>
</table>

Я очень быстро просмотрел документацию BS . Непонятно, какие параметры передать в findAll, чтобы соответствовать строкам, которые я хочу.

Кто-нибудь знает, какой tp bass нужно найтиAll () для соответствия строкам, которые я хочу?

Ответы [ 2 ]

5 голосов
/ 11 января 2011

Не используйте регулярные выражения для анализа HTML.Используйте html-парсер

import lxml.html
doc = lxml.html.fromstring(your_html)
result = doc.xpath("//tr[(@bgcolor='#f01234' or @bgcolor='#c01234') "
    "and @valign='top']")
print result

, который будет извлекать все элементы tr, соответствующие вашему html, вы можете выполнять с ними дальнейшие операции, такие как изменение текста, значения атрибута, извлечение, поиск далее ...

Обязательная ссылка:

RegEx соответствует открытым тегам, кроме автономных тегов XHTML

4 голосов
/ 11 января 2011

Что-то вроде

soup.findAll ('tr', attrs = {'bgcolor': re.compile (г '# f01234 | # c01234'), 'valign': 'top'})

...