Проверьте, есть ли у тега стиль в BeautifulSoup - PullRequest
0 голосов
/ 23 октября 2019

Я анализирую HTML с BeautifulSoup. Мне нужно проверить, есть ли у тега стиль с чем-то вроде border.*:.*px.

. Я могу найти все теги со стилем с помощью,

soup.find_all(["tr"],style=re.compile(r'border.*:[^:]*px'))

Но я должен пройти через HTML впорядок, поэтому для тега, как я могу проверить, имеет ли он стиль r'border.*:[^:]*px'.

Я также ссылаюсь на Проверить, присутствует ли атрибут в теге в BeautifulSoup , используйте метод тега has_attr, но, кажется, он не поддерживает обычный.

value = re.compile(r'border.*:[^:]*px')
tag.has_attr("{'style':"+value+"}")

, но он показывает

TypeError                                 Traceback (most recent call last)
<ipython-input-202-1e077ea6ea4c> in <module>
      1 value = re.compile(r'border.*:[^:]*px')
----> 2 tag.has_attr("{'style':"+value+"}")

TypeError: must be str, not _sre.SRE_Pattern

Ответы [ 2 ]

1 голос
/ 23 октября 2019
def foo(tag):
    import re
    tag_style = tag.attrs.get('style')
    return bool(re.search(r'border.*:[^:]*px', tag_style)) if tag_style else False
0 голосов
/ 23 октября 2019

Я не нашел метод BeautifulSoup4, чтобы получить его. Поэтому я использую re модуль в качестве обходного пути.

import re
border_re = re.compile(r'border.*:[^:]*px')

if tag.has_attr('style') and border_re.search(tag.attrs['style']):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...