首页 > 解决方案 > Python 3,BeautifulSoup 4:find_all 具有特定属性的多个标签

问题描述

在关于 SO 的任何类似标题的问题中,我都找不到我正在寻找的确切语法,所以我正在尝试自己的运气。

我想用来find_all同时查找两种类型的标签:

main = soup.find_all(["div", "a"])

...这工作正常。但是,如果我想对这些结果进行子集化以仅包含具有某些属性的标签,我的语法不会返回任何内容:

main = soup.find_all([("div", {"class": "n"}), ("table", {"class": "sX sX5"})])

我认为这是因为我现在有一个元组列表,而 find_all 不支持它,但我坚持使用替代语法。

有任何想法吗?

标签: python-3.xbeautifulsoup

解决方案


您可以通过 CSS 选择器进行选择:

main = soup.select('div.n, table.sX.sX5')

这将选择所有<div class="n"><table class="sX sX5">


编辑:

运行此脚本:

import requests
from bs4 import BeautifulSoup

url = 'http://webgrabplus.com//epg-channels'

soup = BeautifulSoup(requests.get(url).content, 'html.parser')

for tag in soup.select('div.n, table.sX.sX5'):
    print(tag)

印刷:

...
<div class="n">Albania</div>
<table class="sX sX5"><tr><td>Alsat<br/></td><td></td><td></td><td></td><td></td></tr></table>
<div class="n">Albania</div>
<table class="sX sX5"><tr><td>Klan Kosova<br/>ABC News<br/>Cufo TV<br/>Film Dy HD<br/>Film Aksion<br/>Nat Geo HD<br/>Digi Gold<br/>Alsat M<br/>Hayat TV<br/>N-TV<br/>Peace TV<br/>DW TV<br/>Stinet<br/>Top Channel HD<br/>Fox<br/>Discovery Science HD<br/>STV Folk<br/></td><td>Radio Televizioni 21<br/>Rrokum TV<br/>Junior TV<br/>Plus HD<br/>Fox Life<br/>National Geographic<br/>Kohavision<br/>E TV<br/>TV Prizren<br/>Rai 1<br/>CNN int<br/>Radio Televizioni i Kosoves<br/>Tribuna<br/>Nickelodeon HD<br/>Discovery Channel<br/>ID Xtra HD<br/>Wedding Channel<br/></td><td>Radio Televizioni 21 HD<br/>Rrokum HD<br/>Boomerang<br/>Film Komedi<br/>EXP Shkence<br/>MTV Live HD<br/>Ora News<br/>ON TV<br/>TV Festina<br/>Rai 2<br/>BBC World<br/>Animal Planet HD<br/>Top News<br/>Baby TV<br/>24 Kitchen<br/>TV Arta<br/>TVSH<br/></td><td>Klan TV<br/>My Music<br/>21 Junior<br/>Film Thriller<br/>EXP Histori<br/>musicAL<br/>News 24<br/>21 Popullore<br/>RTL<br/>Rai 3<br/>EuroNews<br/>TV Dukagjini<br/>First Channel<br/>Film Autor<br/>Travel Channel<br/>Rai News<br/></td><td>Klan TV HD<br/>Bang Bang<br/>Film Nje HD<br/>Film Drame<br/>EXP Natyra<br/>Fashion TV<br/>Albanian Screen<br/>EuroSport<br/>RTL 2<br/>Al Jazeera<br/>B92 Info<br/>Top Channel<br/>RTK 1 HD<br/>Film Hits<br/>Fine Living<br/>SuperSonic TV<br/></td></tr></table>
<div class="n">Albania</div>
...

推荐阅读