Форум сайта python.su
Подскажите, как необходимо организовать парсинг rss-ленты сайта.
Как я поняла, мне необходимо открыть файл, считать содержимое, преобразовать в json-объект, а потом уже работать с ним.
Подскажите, как мне нужно правильно всё это сделать? Желательно, с примерами.
Офлайн
эээ… json тут вообще не причем.
Взгляните на модуль feedparser, на этой же странице найдете пример.
Офлайн
igor.kaist, от установки дополнительных модулей необходимо отказаться, так как скрипт будет работать в определённом окружении.
Пишу вот так для открытия файла:
from StringIO import StringIO
site = open(f_site.rss_feed, 'r')
Офлайн
open не может открывать файлы в интернете, для этого используйте urllib или urllib2.
Для парсинга RSS можете использовать xml.dom.minidom. А вообще посмотрите модуль xml.dom.
Офлайн
Использую модули urllib и xml.dom.minidom для парсинга рсс.
Делаю вот так:
from xml.dom.minidom import *
import urllib
...
freelance_site = FreelanceSite.objects.get(id=1)
fh = urllib.urlopen(freelance_site.rss_feed)
fh = fh.read()
site_dom = parseString(str(fh))
site_title = getText(site_dom.getElementsByTagName("title")[0].childNodes)
site_list = site_dom.getElementsByTagName("item")
projects = []
for site in site_list:
title = getText(site.getElementsByTagName("title")[0].childNodes)
link = getText(site.getElementsByTagName("link")[0].childNodes)
description = getText(site.getElementsByTagName("description")[0].childNodes)
category = getText(site.getElementsByTagName("category")[0].childNodes)
pub_date = getText(site.getElementsByTagName("pubDate")[0].childNodes)
projects.append({'title': title, 'link': link, 'description': description, 'category':category, 'pub_date': pub_date})
site_dom.unlink()
<title><![CDATA[Копирайтер сайта Free-lance.ru]]></title>
<description><![CDATA[Приглашаем на постоянную удаленную работу копирайтера – 4 часа в день/5 дней в неделю.]]></description>
Офлайн
Все так же. Если я ничего не путаю, CDATA попадет в CDATASection точно так же, как и text. Ваш getText должен сработать.
К слову, гадость этот minidom. lxml.etree и особенно lxml.objectify имеют на порядок более вменяемый интерфейс.
Офлайн
Всё, разобралась.
Офлайн