Найти - Пользователи
Полная версия: Парсить rss-ленту сайта.
Начало » Python для новичков » Парсить rss-ленту сайта.
1
Mutagena
Подскажите, как необходимо организовать парсинг rss-ленты сайта.
Как я поняла, мне необходимо открыть файл, считать содержимое, преобразовать в json-объект, а потом уже работать с ним.
Подскажите, как мне нужно правильно всё это сделать? Желательно, с примерами.
igor.kaist
эээ… json тут вообще не причем.
Взгляните на модуль feedparser, на этой же странице найдете пример.
Mutagena
igor.kaist, от установки дополнительных модулей необходимо отказаться, так как скрипт будет работать в определённом окружении.
Пишу вот так для открытия файла:
from StringIO import StringIO
site = open(f_site.rss_feed, 'r')
Свойство rss_feed объекта f_site содержит адрес рсс-ленты. Например, http://www.free-lance.ru/rss/all.xml
Но получаю ошибку (22, “invalid mode ('r') or filename”)
Jenyay
open не может открывать файлы в интернете, для этого используйте urllib или urllib2.

Для парсинга RSS можете использовать xml.dom.minidom. А вообще посмотрите модуль xml.dom.
Mutagena
Использую модули 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 имеют на порядок более вменяемый интерфейс.
Mutagena
Всё, разобралась.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB