Я пытаюсь проанализировать RSS-канал на предмет первого экземпляра элемента "".
def pageReader(url):
try:
readPage = urllib2.urlopen(url)
except urllib2.URLError, e:
# print 'We failed to reach a server.'
# print 'Reason: ', e.reason
return 404
except urllib2.HTTPError, e:
# print('The server couldn\'t fulfill the request.')
# print('Error code: ', e.code)
return 404
else:
outputPage = readPage.read()
return outputPage
Предположим, что переданные аргументы верны. Функция возвращает объект str, значение которого представляет собой просто весь RSS-канал - я подтвердил тип с помощью:
a = isinstance(value, str)
if not a:
return -1
Итак, весь RSS-канал был возвращен из вызова функции, в этот момент я наткнулся на кирпичную стену - я пробовал разобрать канал с помощью BeautifulSoup, lxml и различных других библиотек, но безуспешно (у меня было some < / em> успех с BeautifulSoup, но он не смог получить определенные дочерние элементы из родительского, например. Я почти готов прибегнуть к написанию собственного парсера, но я хотел бы знать, есть ли у кого-нибудь какие-либо предложения.
Чтобы воссоздать мою ошибку, просто вызовите указанную выше функцию с аргументом, подобным следующему:
http://www.cert.org/nav/cert_announcements.rss
Вы увидите, что я пытаюсь вернуть первого ребенка.
<item>
<title>New Blog Entry: Common Sense Guide to Mitigating Insider Threats - Best Practice 16 (of 19)</title>
<link>http://www.cert.org/blogs/insider_threat/2013/02/common_sense_guide_to_mitigating_insider_threats_-_best_practice_16_of_19.html</link>
<description>This sixteenth of 19 blog posts about the fourth edition of the Common Sense Guide to Mitigating Insider Threats describes Practice 16: Develop a formalized insider threat program.</description>
<pubDate>Wed, 06 Feb 2013 06:38:07 -0500</pubDate>
</item>
Как я уже сказал, BeautifulSoup не может найти как pubDate, так и Link, которые имеют решающее значение для моего приложения.
Любой совет будет очень признателен.