Подтвердить что ты не робот

BeautifulSoup findAll() для нескольких классов?

Я хотел бы очистить список элементов с веб-сайта и сохранить порядок, в котором они представлены. Эти элементы организованы в таблицу, но они могут быть одним из двух разных классов (в случайном порядке).

Есть ли способ предоставить несколько классов и иметь BeautifulSoup4 найти все элементы, которые находятся в любом из заданных классов?

Мне нужно добиться того, что делает этот код, за исключением сохранения порядка элементов, как это было в исходном коде:

items = soup.findAll(True,{'class':'class1'})
items += soup.findAll(True,{'class':'class2'})
4b9b3361

Ответ 1

вы можете сделать это

soup.findAll(True, {'class':['class1', 'class2']})

Пример:

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<html><body><div class="class1"></div><div class="class2"></div><div class="class3"></div></body></html>')
>>> soup.findAll(True, {"class":["class1", "class2"]})
[<div class="class1"></div>, <div class="class2"></div>]

Ответ 2

Я новичок в Python с BeautifulSoup, но может быть, мой ответ вам поможет. Я столкнулся с той же ситуацией, когда мне нужно найти несколько классов одного тега, поэтому я просто передаю классы в массив, и он работает для меня. Вот фрагмент кода

//Search with single Class
    find_all("tr",  {"class":"abc"})
//Search with multiple classes
    find_all("tr",  {"class": ["abc", "xyz"]})

Ответ 3

Один из способов сделать это - использовать регулярное выражение вместо имени класса:

import re
import requests
from bs4 import BeautifulSoup


s = requests.Session()
link = 'https://leaderboards.guildwars2.com/en/na/achievements'
r = s.get(link)


soup = BeautifulSoup(r.text)
for item in soup.findAll(True, {"class": re.compile("^(equal|up)$")}):
    if 'achievements' in item.attrs['class'] and 'number' in item.attrs['class']:
        print item

Ответ 4

Или это с более свежей версией BeautifulSoup:

find_all('a', class_=['class1', 'class2'])

Использование "class" вернет ошибку, поэтому вместо этого они используют "class_".