Как использовать оператор OR между классами в beautifulsoup findAll? - PullRequest
1 голос
/ 07 октября 2019

У меня проблема с анализом HTML. Я работаю с веб-сайтом, в котором есть несколько элементов в списке с разными именами классов. То, что я пытаюсь сделать, это найти их все в одной находкеВсе вот так:

page_soup.findAll("li", {"Class" : "Class1" or "Class2"})

Я хочу иметь "ИЛИ" между моими классами.

Пример html:

<ol class="products-list" id="products">
    <li class="item odd">
    </li>
    <li class="item even">
    </li>
    <li class="item last even">
    </li>
</ol>

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Используйте Select (), который быстрее, чем findAll ()

page_soup=BeautifulSoup(html,'html.parser')
for item in page_soup.select(".odd,.even"):
    print(item)

Код здесь :

from bs4 import BeautifulSoup
html='''<ol class="products-list" id="products">
    <li class="item odd">
    </li>
    <li class="item even">
    </li>
    <li class="item last even">
    </li>
</ol>
'''

page_soup=BeautifulSoup(html,'html.parser')
for item in page_soup.select(".odd,.even"):
    print(item)
0 голосов
/ 07 октября 2019

Полный рабочий образец:

from bs4 import BeautifulSoup

text = """
<body>
    <ul>
        <li class="Class1">Class 1</li>
        <li class="Class2">Class 2</li>
        <div class="Class1 special">Class 1 in div</div>
        <div class="Class2 special">Class2 in div</div>
    </ul>
</body>"""

soup = BeautifulSoup(text,"lxml")
result = soup.find_all(lambda tag: tag.name == 'li' and  
( tag.get('class') == ['Class1'] or tag.get('class') == ['Class2'] ))

print(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...