Я довольно новичок в сборе данных из HTML, и хотя я прочитал документацию, я не смог найти окончательного ответа на следующий вопрос: я хочу собрать похожие теги, которые имеют разные атрибуты. То, что я делаю в настоящее время, работает, но кажется, что должно быть более элегантное решение.
from bs4 import BeautifulSoup as soup
html_doc ="""
<html><div class="cf result lastresult" id="3" itemscope="" itemtype="http://schema.org/Test"></div>
<div class="cf result" id="1" itemscope="" itemtype="http://schema.org/Test2"></div>
<div class="cf result" id="2" itemscope="" itemtype="http://schema.org/Test"></div></html>"""
soup_doc = soup(html_doc, 'lxml')
Я хочу собрать все три класса div, однако у одного есть другое имя (см. Результат lastresult).
Текущее решение:
Item_list=[]
for i in soup_doc.find_all("div",{"class":("cf result lastresult" )}):
Item_list.append(i)
for i in soup_doc.find_all("div",{"class":("cf result")}):
Item_list.append(i)
Это приводит к желаемому результату:
[<div class="cf result lastresult" id="3" itemscope="" itemtype="http://schema.org/Test"></div>,
<div class="cf result" id="1" itemscope="" itemtype="http://schema.org/Test2"></div>,
<div class="cf result" id="2" itemscope="" itemtype="http://schema.org/Test"></div>]
Я пробовал несколько других вариантов, которые казались более логичными, но не работали, такие как :
Item_list=soup_doc.find_all("div",{"class":("cf result" or "lastresult" )})
Item_list=soup_doc.find_all("div",{"class":("cf result" )}).append(soup_doc.find_all("div",{"class":("cf result lastresult" )}))
Любые решения по сокращению или ускорению кода приветствуются.