Python: parsing di un feed RSS remoto

Python: parsing di un feed RSS remoto

In questo articolo vedremo come effettuare il parsing di un feed RSS remoto usando un modulo specifico di Python.

Il modulo feedparser è in grado di effettuare il parsing di diversi tipi di feed. Dopo aver attivato il nostro ambiente virtuale, possiamo installarlo come segue:

pip install feedparser

Questo modulo trasforma un feed RSS in un oggetto i cui attributi (o proprietà), corrispondono ai diversi elementi XML del feed stesso.

Possiamo usarlo in questo modo:

import feedparser
from datetime import datetime

def read_rss_feed(feed_url=None):
    if feed_url is None:
        return None
    if not feed_url.startswith('https://'):
        return None
    output = []
    rss_feed = feedparser.parse(feed_url)
    entries = rss_feed.entries
    date_fmt = '%a, %d %b %Y %H:%M:%S %Z'
    for entry in entries:
        title = entry.title
        pubdate = entry.published
        date = datetime.strptime(pubdate, date_fmt)
        entry_date = date.strftime('%d/%m/%Y')
        link = entry.link
        output.append({
            'title': title,
            'link': link,
            'date': entry_date        
        })
    return output

La funzione appena definita usa l'URL del feed per invocare il metodo parse() del modulo feedparser. rss_feed quindi è un oggetto i cui attributi, come abbiamo detto, rappresentano gli elementi del documento XML. Quindi entries è una lista di oggetti contenente tutti gli elementi che marcano i post del feed RSS. Ciascuno di questi oggetti, a sua volta, dispone di attributi specifici che corrispondono ad altrettanti tag XML, come ad esempio title e link.

In pratica effettuiamo un loop tra i post e restituiamo una lista di dizionari in cui memorizziamo il titolo dele post, il suo URL e la data di pubblicazione formattata nel formato locale. Il formato RSS dispone di date standard, quindi è semplice specificare il formato di partenza nella variabile date_fmt da usare in seguito nel metodo datetime.strptime().

Torna su