2012-03-30 35 views
5

bài viết đầu tiên của tôi ở đây, tôi đang cố gắng để tìm thấy tất cả các thẻ trong html cụ thể này và tôi không thể có được chúng ra, đây là đoạn code:python BeautifulSoup tìm kiếm một thẻ

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"}) 

chức năng tìm lợi nhuận [ ], nhưng tôi thấy rằng có các thẻ với lớp: "đen" trong html, tôi có bỏ lỡ điều gì đó không?

Cảm ơn, Vedran

+0

Bạn đang sử dụng phiên bản/phiên bản python/thư viện nào? – fabrizioM

Trả lời

1

Có vẻ như để làm việc đối với tôi, vì vậy tôi muốn nói rằng vấn đề là với tài liệu html của bạn.

Tôi cố gắng chạy như sau:

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"})) 

Và như đầu ra tôi nhận:

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

Edit: Như @Puneet đã chỉ ra, vấn đề có thể là thiếu của một khoảng trắng giữa các thuộc tính trong html bạn đang tìm nạp.

tôi đã cố gắng ví dụ để thay đổi ví dụ trên một cái gì đó như:

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

# etc.. as before 

Và tôi có một danh sách trống như kết quả: [].

1

Vấn đề ở đây là các thẻ lớp của trang web được phân tách khỏi phần cuối của giá trị thuộc tính href với một khoảng trắng. BeautifulSoup dường như không xử lý điều này rất tốt. Một trường hợp thử nghiệm reproducable là sau

>>> 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

nó seams rằng việc sử dụng lxml giải quyết vấn đề:

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

Tôi cũng có cùng một vấn đề.

Hãy thử

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

thay vì

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

soup.findAll() hoạt động tốt đối với tôi.

+0

Cũng hoạt động với các yếu tố khác như: soup.findAll ("label", {"for": "Form_CompanyName"}) –

Các vấn đề liên quan