2012-03-30 136 views
5

我的第一篇文章在這裏,我試圖找到這個特定的HTML所有標籤,我不能把他們救出來,這是代碼:蟒蛇BeautifulSoup搜索標籤

from bs4 import BeautifulSoup 
from urllib import urlopen 

url = "http://www.jutarnji.hr" 
html_doc = urlopen(url).read() 
soup = BeautifulSoup(html_doc) 
soup.prettify() 
soup.find_all("a", {"class":"black"}) 

查找功能返回[ ],但我看到在HTML中有類標籤:「黑色」,我錯過了什麼?

感謝, 韋德蘭

+0

你使用的是什麼python版本/庫版本/ os? – fabrizioM 2012-03-31 14:45:42

回答

1

這似乎爲我工作,所以我會說,這個問題是與你的HTML文檔。

我試着運行以下命令:

from bs4 import BeautifulSoup 

html_doc = """<html> 
<body> 
    <a class="black"> 
    <b> 
    text1 
    </b> 
    <c> 
    text2 
    </c> 
    </a> 
    <a class="micio"> 
    </a> 
    <a class="black"> 
    </a> 
</body> 
</html>""" 
soup = BeautifulSoup(html_doc) 
soup.prettify() 
print(soup.find_all("a", {"class":"black"})) 

而且作爲輸出我:

[<a class="black"> 
<b> 
    text1 
    </b> 
<c> 
    text2 
    </c> 
</a>, <a class="black"> 
</a>] 

編輯:作爲@Puneet指出,問題可能是缺乏在你提取的html中屬性之間的空白區域。

我試圖例如改變上面的例子是這樣的:

html_doc = """<html> 
<body> 
    <aclass="black"> 

# etc.. as before 

而且我得到了一個空的列表作爲結果:[]

1

這裏的問題是,網站的類標記沒有用空格與href屬性值的末尾分開。 BeautifulSoup似乎不能很好地處理這個問題。一個可再現的測試案例是以下

>>> BeautifulSoup.BeautifulSoup('<a href="http://www.jutarnji.hr/crkva-se-ogradila-od--cjenika--don-mikica--osim-krizme--sve-druge-financijske-obveze-su-neprihvatljive/1018314/" class="black">').prettify() 
'<a href="http://www.jutarnji.hr/crkva-se-ogradila-od--cjenika--don-mikica--osim-krizme--sve-druge-financijske-obveze-su-neprihvatljive/1018314/" class="black">\n</a>' 
>>> BeautifulSoup.BeautifulSoup('<a href="http://www.jutarnji.hr/crkva-se-ogradila-od--cjenika--don-mikica--osim-krizme--sve-druge-financijske-obveze-su-neprihvatljive/1018314/"class="black">').prettify() 
'' 
0

它煤層,使用lxml的解決了這個問題:

from bs4 import BeautifulSoup 
import lxml 
from urllib import urlopen 

url = "http://www.jutarnji.hr" 
html_doc = urlopen(url).read() 
soup = BeautifulSoup(html_doc, "lxml") 
soup.prettify() 

soup.find_all("a", {"class":"black"}) 
1

我也有同樣的問題。

嘗試的

soup.findAll("a",{"class":"black"}) 

代替

soup.find_all("a",{"class":"black"}) 

soup.findAll()很適合我。

+0

也適用於其他元素,如:soup.findAll(「label」,{「for」:「Form_CompanyName」}) – 2017-05-16 15:57:27