2016-09-13 87 views
0

如何使用美麗的湯找到具有3個屬性的所有鏈接?美麗的湯。如何找到具有3個屬性的所有鏈接

我想找到這包括所有屬性的所有鏈接:

a id="js_24" class="_27jf _3emk" data-hover="tooltip" 

我試過這樣的方式:

emo = soup.find_all('a', {'id': 'fjs_24', 'class': '_27jf _3emk', 'data-hover':"tooltip"}) 

但沒有sucess。我沒有得到任何結果。

全部鏈接看起來如此:

<a id="js_24" class="_27jf _3emk" data-hover="tooltip" aria-label="6 Wow" href="/ufi/reaction/profile/browser/?ft_ent_identifier=909182312524600&av=100011414120311" rel="ignore" role="button" tabindex="-1"> 
+0

的ID是不是唯一的? –

+0

不,不是那麼容易;) –

回答

1

沒有什麼不對您的邏輯,問題是ID是錯誤的,你有fjs_24當實際ID爲js_24

emo = soup.find_all('a', {'id': 'js_24', 'class': '_27jf _3emk', 'data-hover':"tooltip"}) 

一旦你做出改變,你可以看到它的作品:

In [10]: from bs4 import BeautifulSoup 


In [11]: soup = BeautifulSoup("""<a id="js_24" class="_27jf _3emk" data-hover="tooltip" aria-label="6 Wow" href="/ufi/reaction/profile/browser/?ft_ent_identifier=909182312524600&av=100011414120311" rel="ignore" role="button" tabindex="-1"></a>""","lxml") 


In [12]: soup.find_all('a', {'id': 'fjs_24', 'class': '_27jf _3emk', 'data-hover':"tooltip"}) 
Out[12]: [] 

In [13]: soup.find_all('a', {'id': 'js_24', 'class': '_27jf _3emk', 'data-hover':"tooltip"}) 
Out[13]: [<a aria-label="6 Wow" class="_27jf _3emk" data-hover="tooltip" href="/ufi/reaction/profile/browser/?ft_ent_identifier=909182312524600&amp;av=100011414120311" id="js_24" rel="ignore" role="button" tabindex="-1"></a>] 

如果您LXML安裝,你可以做很多速度更快,使用CSS選擇更簡潔:

from lxml import html 

tree = html.fromstring(""""<a id="js_24" class="_27jf _3emk" data-hover="tooltip" aria-label="6 Wow" href="/ufi/reaction/profile/browser/?ft_ent_identifier=909182312524600&av=100011414120311" rel="ignore" role="button" tabindex="-1"></a>""") 

print(tree.cssselect("#js_24[class='_27jf _3emk'][data-hover='tooltip']")) 
+0

謝謝:)但如何打印出來? for em in emo: print em.text does not work –

+0

@AnnaK,如果您只是尋找一個使用find來代替find_all,find_all會查找多個匹配項並返回一個列表/ ResultSet –

+0

如果您希望多個然後只是'[emo中的a.text]' –