beautifulsoup получает значение атрибута с помощью метода get_attr

#python-3.x #beautifulsoup

#python-3.x #beautifulsoup

Вопрос:

Я хотел бы напечатать все элементы в списке, но не содержащие тег style = следующее значение: "text-align: center"

 test = soup.find_all("p")
for x in test:
    if not x.has_attr('style'):
        print(x)
  

По сути, верните мне все элементы в списке, стиль которых не равен: "text-align: center" . Возможно, здесь просто небольшая ошибка, но возможно ли определить значение style в has_attr?

Ответ №1:

Просто проверьте, присутствует ли определенный стиль в стиле тега. Стиль не считается многозначным атрибутом, и вся строка в кавычках является значением атрибута style. Использование x.get("style",'') вместо x['style'] также обрабатывает случаи, в которых отсутствует атрибут style, и позволяет избежать KeyError .

 for x in test:
    if 'text-align: center' not in x.get("style",''):
        print(x)
  

Вы также можете использовать понимание списка, чтобы пропустить несколько строк.

 test=[x for x in soup.find_all("p") if 'text-align: center' not in x.get("style",'')]
print(test)
  

Ответ №2:

Если вы хотите рассмотреть другой подход, вы могли бы использовать селектор :not

 from bs4 import BeautifulSoup as bs

html = '''
<html>
<head>
<title>Try jsoup</title>
</head>
<body>
<p style="color:green">This is the chosen paragraph.</p>
<p style="text-align: center">This is another paragraph.</p>
</body>
</html>

'''
soup = bs(html, 'lxml')
items = [item.text for item in soup.select('p:not([style="text-align: center"])')]
print(items)