Как написать несколько HTML тегов в список, которые имеют различные атрибуты, используя BeautifulSoup? - PullRequest
0 голосов
/ 15 марта 2020

Я довольно новичок в сборе данных из 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" )}))

Любые решения по сокращению или ускорению кода приветствуются.

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