RSS-фид соскоб с Python - PullRequest
       5

RSS-фид соскоб с Python

3 голосов
/ 13 февраля 2012

Я новичок в Python и программировании в целом, поэтому, пожалуйста, извините, если вопрос очень тупой.

Я следовал этому учебнику по пошаговой очистке RSS, но я получаю сообщение об ошибке «Список индексов вне диапазона» от Python при попытке собрать соответствующие ссылки на названия статей собирается.

Вот мой код:

from urllib import urlopen
from BeautifulSoup import BeautifulSoup
import re

source  = urlopen('http://feeds.huffingtonpost.com/huffingtonpost/raw_feed').read()

title = re.compile('<title>(.*)</title>')
link = re.compile('<link>(.*)</link>')

find_title = re.findall(title, source)
find_link = re.findall(link, source)

literate = []
literate[:] = range(1, 16)

for i in literate:
    print find_title[i]
    print find_link[i]

Он прекрасно работает, когда я только говорю ему, чтобы он получал заголовки, но немедленно выдает ошибку индекса, когда я хочу получить заголовки и их соответствующие ссылки.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

6 голосов
/ 13 февраля 2012

Вы можете использовать модуль feedparser для анализа RSS-канала с заданным URL-адресом :

#!/usr/bin/env python
import feedparser # pip install feedparser

d = feedparser.parse('http://feeds.huffingtonpost.com/huffingtonpost/latestnews')
# .. skipped handling http errors, cacheing ..

for e in d.entries:
    print(e.title)
    print(e.link)
    print(e.description)
    print("\n") # 2 newlines

Вывод

Even Critics Of Safety Net Increasingly Depend On It
http://www.huffingtonpost.com/2012/02/12/safety-net-benefits_n_1271867.html
<p>Ki Gulbranson owns a logo apparel shop, deals in 
<!-- ... snip ... -->

Christopher Cain, Atlanta Anti-Gay Attack Suspect, Arrested And
Charged With Aggravated Assault And Robbery
http://www.huffingtonpost.com/2012/02/12/atlanta-anti-gay-suspect-christopher-cain-arrested_n_1271811.html
<p>ATLANTA -- Atlanta police have arrested a suspect 
<!-- ... snip ... -->

Это может бытьхорошая идея использовать регулярные выражения для разбора rss (xml) .

1 голос
/ 13 февраля 2012

Я думаю, что вы используете неправильное регулярное выражение для извлечения ссылки со своей страницы.

>>> link = re.compile('<link rel="alternate" type="text/html" href=(.*)')
>>> find_link = re.findall(link, source)
>>> find_link[1].strip()
'"http://www.huffingtonpost.com/andrew-brandt/the-peyton-predicament-pa_b_1271834.html" />'
>>> len(find_link)
15
>>>

Взглянув на html source вашей страницы, вы обнаружите, что ссылки не заключены в <link></link> шаблон.

На самом деле шаблон <link rel="alternate" type="text/html" href= links here.

Вот почему ваше регулярное выражение не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...