蟒蛇BeautifulSoup搜索标签

问题描述:

我的第一篇文章在这里,我试图找到这个特定的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

这似乎为我工作,所以我会说,这个问题是与你的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 

而且我得到了一个空的列表作为结果:[]

这里的问题是,网站的类标记没有用空格与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() 
'' 

它煤层,使用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"}) 

我也有同样的问题。

尝试的

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