Найти - Пользователи
Полная версия: Парсинг RSS с помощью RegExp.
Начало » Python для новичков » Парсинг RSS с помощью RegExp.
1 2
Manul
Здравствуйте, пытаюсь написать парсер RSS с помощью RegExp, читал док по RegExp на сайте питона, много сторонних мануалов, принцип понял, но что то не работает. Прошу помочь.

Задача: распарсить такой вот кусочек и оставить только содержимое тэгов <title></title> и <description></disctiption>.
<item> 
<guid isPermaLink="false">27a4275d37a08e08e7eff602bf11969b8314854ba90a4f72fdccb47211170353</guid>
<link>http://bash.org.ru/quote/408844</link>
<title>Цитата #408844</title>
<pubDate>Sun, 05 Dec 2010 12:12:02 +0400</pubDate>
<description><![CDATA[@lsd:<br>Тут один товарищ интересный вопрос задал: 'Разговаривать с кошкой — это паранойя или ещё не совсем?'.<br><br>@masai:<br>Это не паранойя. Паранойя — это когда боишься при кошке лишнее сболтнуть.]]></description>
</item>
Написал парсер:
regexp = r"<item>.+</link>\s+<title>([А-Яа-я]\s*#\d*)</title>.+</pubDate>\s+<description><!\[CDATA\[(.+)\]\]>\s*</description>\s+</item>"
Весь код:
# coding: utf-8
import urllib
import re
regexp = r"<item>.+</link>\s+<title>([А-Яа-я]\s*#\d*)</title>.+</pubDate>\s+<description><!\[CDATA\[(.+)\]\]>\s*</description>\s+</item>"
f = open('/home/manul/Desktop/rss.txt','w')
def take_rss(a):
rss_text = urllib.urlopen(a).read()
f.write(rss_text)
f.close()
f1 = open('/home/manul/Desktop/rss.txt','r')
rss_text = f1.read()
rss = re.findall(regexp,rss_text)
print rss


feed = "http://bash.org.ru/rss/"#raw_input("Введите ссылку на фид.\n")#http://bash.org.ru/rss/

take_rss(feed)
P.S. Прошу не винить за индусский код, я только учусь :)
P.P.S. Заранее благодарен за потраченное время.
ta
лучше юзай feedparser (python-feedparser).
пример см. на сайте http://feedparser.org/
Manul
Спасибо, но это как в цитате: “Некоторые люди, во время решения одной проблемы думают: «Я знаю, я буду использовать регулярные выражения». Теперь у них две проблемы…” Хочется решить появившуюся проблему :)
Manul
Вопрос еще актуален!
ta
# coding: utf-8
import re

data = """<item>
<guid isPermaLink="false">be9ce7e0b7efeb361778cf1be40b5c64f5634bd13deddba6fec7b1970cf2155e</guid>
<link>http://bash.org.ru/quote/408879</link>
<title>Цитата #408879</title>
<pubDate>Wed, 08 Dec 2010 11:13:13 +0400</pubDate>
<description><![CDATA[Живу в частном доме. Каждый раз, убирая с газона перед двором мусор, накиданный анонимными педерастами, задумываюсь: а есть ли в &quot;Гарри Поттере&quot; или, скажем, в &quot;Тайном городе&quot; заклинание, чтобы мусор нашел хозяина и залез ему в сраку.]]></description>
</item>"""

p = r"""
<item>\s*?
<guid.*?>.*?</guid>\s*?
<link>.*?</link>\s*?
<title>(.*?)</title>\s*?
<pubdate>.*?</pubdate>\s*?
<description>
<!\[CDATA\[
(.*?)
\]\]>
</description>\s*?
</item>
"""

p = re.compile(p, re.I|re.X)
rez = p.findall(data)

print type(rez), len(rez)
print rez[0][0]
print rez[0][1]
<type 'list'> 1
Цитата #408879
Живу в частном доме. Каждый раз, убирая с газона перед двором мусор, накиданный анонимными педерастами, задумываюсь: а есть ли в &quot;Гарри Поттере&quot; или, скажем, в &quot;Тайном городе&quot; заклинание, чтобы мусор нашел хозяина и залез ему в сраку.
pill
А зачем такая тяжелая регулярка?
p = r"""<title>(.+?)</title>.+?<description><!\[CDATA\[(.+?)\]\]></description>"""
p = re.compile(p, re.DOTALL)
такая точно так же ловит…
ta
pill
товарищ парсит рсс-ленту.
твоя регулярка выловит немного лишнего.
pill
Чисто ради спортивного интересу взял ленту баша, потестил на обоих вариантах, пришлоcь чуть конкретизировать:
r"""<item>.+?<title>(.+?)</title>.+?<description><!\[CDATA\[(.+?)\]\]></description>.+?</item>"""
результат:
diff test.bash test2.bash
—разницы нет

но в целом это не принципиально… )
Андрей Светлов
Вы знаете, что существует десяток несовместимых между собой стандартов rss? Плюс еще пяток atom?
А description не обязан быть CDATA?
pill
Андрей Светлов
Вы знаете, что существует десяток несовместимых между собой стандартов rss? Плюс еще пяток atom?
А description не обязан быть CDATA?
Ну дык, вполне достаточный ответ уже был дан:
лучше юзай feedparser (python-feedparser).
пример см. на сайте http://feedparser.org/
А это так вода в ступе… )
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