2012-03-30 23 views
5

mój pierwszy post tutaj, staram się znaleźć wszystkie znaczniki w tym konkretnym html i nie mogę się ich pozbyć, jest to kod:pyton BeautifulSoup szukają tag

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

funkcja zwraca find [ ], ale widzę, że istnieją znaczniki z klasą: "czarny" w html, czy coś mi brakuje?

Dzięki Vedran

+0

Jakiej wersji python/library version/os używasz? – fabrizioM

Odpowiedz

1

Wydaje się pracować dla mnie, więc powiedziałbym, że problem jest z dokumentu HTML.

Próbowałem uruchomić następujące:

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 jako wyjście mam:

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

Edit: W @Puneet podkreślił, problemem może być brak biały odstęp między atrybutami w pobieranym html.

Próbowałem na przykład zmienić powyższy przykład czegoś podobnego:

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

# etc.. as before 

I mam pustą listę jako wynik: [].

1

Problem polega na tym, że znaczniki klasy witryny nie są oddzielane od końca wartości atrybutu href spacją. BeautifulSoup nie radzi sobie z tym bardzo dobrze. Odtwarzalny przypadek testowy jest następujący

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

szwy, że za pomocą lxml rozwiązuje problem:

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

miałem również ten sam problem.

Spróbuj

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

zamiast

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

soup.findAll() działa dobrze dla mnie.

+0

Działa również z innymi elementami, takimi jak: soup.findAll ("label", {"for": "Form_CompanyName"}) –