У меня есть два разных набора тегов div в HTML:
<div class="ABC BCD CDE123">
<div class="ABC BCD CDE234">
<div class="ABC BCD CDE345">
and
<div class="ABC XYZ BCD">
Я хочу выбрать все теги с ABC и BCD, но не содержащие класс XYZ с BeautifullSoup4.
Я уже знаю об этом подходе:
soup.find_all('div', class_=['ABC','BCD'])
, который ищет как ИЛИ (поэтому должны присутствовать ABC или BCD).
Я также знаю об этом подходе здесь:
def myfunction(theclass):
return theclass is not None and len(theclass)=5
soup.find_all('div', class_=myfunction)
что вернет все div с длиной имени класса 5
Я попытался решить мою проблему следующим образом:
soup.find_all('div', class_ = lambda x: x and 'ABC' and 'BCD' in x.split() and x and 'XYZ' not in x.split())
но это не сработало ...
Поэтому я попытался отладить это с помощью этого подхода здесь:
def myfunction(theclass):
print theclass
return True
soup.find_all('div', class_=myfunction)
Кажется, проблема в том, что из тега вот так:
<div class="ABC BCD CDE123">
только «ABC» передается myfunction, поэтому theclass = «ABC»
а не theclass = 'ABC BCD CDE123', что я ожидал ...
это также причина, почему я думаю, почему лямбда-функция не работает.
любая подсказка, как я могу отфильтровать теги в соответствии с моим требованием:
Я хочу выбрать все теги с ABC и BCD, но не содержащие класс XYZ с BeautifullSoup4.
??
Спасибо за ваши мысли ...