亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

美麗的湯 - 選擇所有具有類的元素,但如果它們還有其他類,也將它們分開或忽略元素

美麗的湯 - 選擇所有具有類的元素,但如果它們還有其他類,也將它們分開或忽略元素

慕婉清6462132 2022-07-05 19:27:02
我有以下結構:<div class="alpha"><div class="alpha"><div class="alpha"><div class="alpha betha"><div class="alpha gama"><div class="alpha">我需要獲取列表中只有“alpha”作為類的所有元素。在另一個列表中獲取所有具有 'alpha' 和 'betha' 的元素。忽略其他組合,如“alpha gama”。我知道我可以獲得所有具有類的元素container.findAll('div', {'class': 'alpha'})但是如何區分/忽略 2 和 3。
查看完整描述

2 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

您可以通過以下方法使用 CSS 選擇器.select():


txt = '''<div class="alpha">1</div>

<div class="alpha">2</div>

<div class="alpha">3</div>

<div class="alpha betha">4</div>

<div class="betha alpha">5</div>

<div class="alpha betha gama">6</div>

<div class="alpha gama">7</div>

<div class="alpha">8</div>'''


from bs4 import BeautifulSoup


soup = BeautifulSoup(txt, 'html.parser')


only_alpha = soup.select('[class="alpha"]')

only_alpha_betha = soup.select('.alpha.betha:not(.gama)')


print('Only alpha:', only_alpha)

print('Only alpha and betha:', only_alpha_betha)

印刷:


Only alpha: [<div class="alpha">1</div>, <div class="alpha">2</div>, <div class="alpha">3</div>, <div class="alpha">8</div>]

Only alpha and betha: [<div class="alpha betha">4</div>, <div class="betha alpha">5</div>]



查看完整回答
反對 回復 2022-07-05
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

為什么不創建一個輔助函數?


bs4 允許您在使用find_all()a function as filter搜索樹時指定。


從文檔:


如果其他匹配項都不適合您,請定義一個將元素作為唯一參數的函數。True 如果參數匹配,則函數應返回,False否則返回。


問題是我們不能傳遞任何其他參數(在這種情況下是有效類的列表)。我們可以通過使用包裝函數來動態創建過濾器來克服這個問題。


def create_filter(tag_name, class_list):

    def class_filter(tag):

        return (

            tag.name == tag_name and

            set(tag.get('class', [])) == set(class_list)

        )

    return class_filter

讓我們看看這在 @AndrejKesely 的示例 html 上是如何工作的。


僅有的alpha


print(soup.find_all(create_filter('div', ['alpha'])))

輸出


[<div class="alpha">1</div>, <div class="alpha">2</div>, <div class="alpha">3</div>, <div class="alpha">8</div>]

只有alpha和betha


print(soup.find_all(create_filter('div', ['alpha', 'betha'])))

輸出


[<div class="alpha betha">4</div>, <div class="betha alpha">5</div>]


查看完整回答
反對 回復 2022-07-05
  • 2 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號