Фильтр Beautifulsoup содержит класс, а не другой класс - PullRequest
0 голосов
/ 20 января 2019

Я хочу отфильтровать скрипт, который содержит 'class' и НЕ включает 'style', и я не хочу использовать set, потому что он не возвращает правильный ответ. вот сценарий:

<p class="price hidden-xs" style="width:100%">-</p>

и я использую этот код:

milage = soup.find_all('p', {'class' : 'price hidden-xs'})

как я могу это исправить?

Ответы [ 3 ]

0 голосов
/ 20 января 2019

Вы можете просто сделать:

milage = soup.find_all('p', {'class' : 'price hidden-xs', 'style' : False})

Это должно дать вам все p теги с class = price hidden-xs, и ни один с style attr.

БС: Основной метод поиска

0 голосов
/ 21 января 2019

вы можете использовать fromstring и указать не стиль атрибута в выражении xpath

#import requests
from lxml.html import fromstring
# url = ''
# tree = html.fromstring( requests.get(url).content)
h = '''
 <p class="price hidden-xs" style="width:100%">Not me</p>
 <p class="price hidden-xs">Me</p>
'''
tree = fromstring(h)
items = [item.text for item in tree.xpath("//p[@class='price hidden-xs' and not(@style)]")]
print(items)
0 голосов
/ 20 января 2019

Вы можете просто отфильтровать элементы, которые имеют атрибут style, с условным пониманием списка:

from bs4 import BeautifulSoup

markup = (
    '<p id="with_style" class="price hidden-xs" style="width:100%">-</p>'
    '<p id="without_style" class="price hidden-xs">-</p>'
)

soup = BeautifulSoup(markup, "html.parser")

print(
    [
        e
        for e in soup.find_all("p", {"class": "price hidden-xs"})
        if not e.has_attr("style")
    ]
)

Результат:

[<p class="price hidden-xs" id="without_style">-</p>]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...