2013-05-01 1 views
1

Я использую Python и Beautifulsoup для анализа HTML-данных и получения п-тегов из RSS-каналов. Однако некоторые URL-адреса вызывают проблемы, потому что проанализированный суп-объект не включает все узлы документа.Beautifulsoup lost nodes

Например, я пытался разобрать http://feeds.chicagotribune.com/~r/ChicagoBreakingNews/~3/T2Zg3dk4L88/story01.htm

Но после сравнения анализируемого объекта с исходным кодом страницы, я заметил, что все узлы после ul class="nextgen-left" отсутствуют.

Вот как я разобрать документы:

from bs4 import BeautifulSoup as bs 

url = 'http://feeds.chicagotribune.com/~r/ChicagoBreakingNews/~3/T2Zg3dk4L88/story01.htm' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
request = urllib2.Request(url) 

response = opener.open(request) 

soup = bs(response,'lxml')   
print soup 
+2

Попробуйте ввести другой парсер; HTML в фиде разбит, и разные парсеры обрабатывают это по-разному. –

ответ

6

Входной HTML не совсем совместимую, так что вам придется использовать другой анализатор здесь. Анализатор html5lib правильно обрабатывает эту страницу:

>>> import requests 
>>> from bs4 import BeautifulSoup 
>>> r = requests.get('http://feeds.chicagotribune.com/~r/ChicagoBreakingNews/~3/T2Zg3dk4L88/story01.htm') 
>>> soup = BeautifulSoup(r.text, 'lxml') 
>>> soup.find('div', id='story-body') is not None 
False 
>>> soup = BeautifulSoup(r.text, 'html5') 
>>> soup.find('div', id='story-body') is not None 
True