python-3.x - 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 不支持它,但我坚持使用替代语法。
有任何想法吗?
解决方案
您可以通过 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>
...
推荐阅读
- javascript - Flask,Ajax,获取 ajax url 的 url 值
- php - 如何用php中的模式替换所有出现的字符串开始和结束
- python-3.x - VS CODE 中没有终端输出
- mysql - 在满足其他条件后,MySQL SELECT 具有条件的最小行 ID
- c++ - Qt:无法直接将滚动条添加到有孩子的小部件
- java - java蚂蚁应用程序。linux下无法编译
- python - 当从 ODE 求解器调用非线性方程求解器时,fsolve 不匹配形状错误
- javascript - 我想将数据发送到本地服务器
- c# - ghost doc 生成的 C# xml 文档中的括号是什么意思?
- python - 使用 make_scorer 创建 True Positives 指标