#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)