2012-03-30 2 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

ответ

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

Edit: Как @Puneet отметил, что проблема может быть отсутствие пробела между атрибутами в html, который вы извлекаете.

Я попытался, например, чтобы изменить приведенный выше пример, чтобы что-то вроде:

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

# etc.. as before 

И я получил пустой список в качестве результата: [].

1

Проблема заключается в том, что теги класса веб-сайта arent отделены от конца значения атрибута 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"}) –