當前位置: 首頁>>技術教程>>正文


在Python中使用Feedparser解析RSS

總覽

在本文中,我們將簡要介紹如何使用Python下載和解析聯合供稿(Rss Feed)。
在Python中跟這個功能相關模塊是”Feedparser”。完整的英文文檔可以在這裏找到。

什麽是RSS?

RSS是Rich Site Summary的縮寫,它使用標準的Web Feed格式發布經常更新的信息:博客條目,新聞標題,音頻,視頻。
RSS文檔(也稱為”feed”,”web feed”或”channel”)包含完整或摘要的文本以及元數據,例如發布日期和作者姓名。RSS的詳細定義見wikipedia: [資源]

什麽是Feedparser?

Feedparser是一個Python庫,用於解析所有已知格式的Feed,包括Atom,RSS和RDF。這個模塊從Python 2.4到3.3一直都有支持。 [資源]

RSS元素

在安裝feedparser模塊並開始編碼之前,讓我們看一些可用的RSS元素。 RSS Feed中最常用的元素是:
“title”(標題),”link”(鏈接),”description”(描述),”publication date”(發布日期)和”entry ID”(資源ID)。
不太常用的元素是”image”(圖像),”categories”(類別),”enclosures”(附件)和”cloud”。

安裝Feedparser

要在計算機上安裝feedparser,請打開您的終端,然後使用“pip(用於安裝和管理Python軟件包的工具)

sudo pip install feedparser

要驗證是否安裝了feedparser,可以運行”pip list”。當然,您也可以進入交互模式,然後在其中導入feedparser模塊。
如果看到如下所示的輸出(也就是沒有提示:模塊找不到的報錯),則可以確定已成功安裝。

>>> import feedparser
>>>

現在我們已經安裝了feedparser模塊,接下來看看怎麽使用。

獲取RSS feed

您可以使用所需的任何RSS feed來源。由於我喜歡閱讀Reddit,我將使用它作為示例。 Reddit由許多sub-reddits組成,我現在特別感興趣的是”Python” sub-reddit。
獲取RSS Feed的方法隻是查找該sub-reddit的URL,並向其中添加”.rss”。我們需要的python sub-reddit的RSS feed是:http://www.reddit.com/r/python/.rss

使用Feedparser

您可以通過導入feedparser模塊來啟動程序。

import feedparser

創建Feed,放入所需的RSS feed。

d = feedparser.parse('http://www.reddit.com/r/python/.rss')

元素”channel”在d.feed中可用(回顧上麵的”RSS Elements”(RSS元素))。這些項目(例如文章)在列表d.entries中可用。
您可以按在原始Feed中顯示的順序訪問列表中的項目,因此d.entries [0]中提供了第一項。

打印提要的標題

print d['feed']['title']

>>> Python

解析相對鏈接

print d['feed']['link']

>>> http://www.reddit.com/r/Python/

解析轉義的HTML

print d.feed.subtitle

>>> news about the dynamic, interpreted, interactive, object-oriented, extensible
programming language Python

查看條目數

print len(d['entries'])

>>> 25

Feed中的每個條目都是一個字典。用[0]打印第一個條目。

print d['entries'][0]['title'] 

>>> Functional Python made easy with a new library: Funcy

打印第一個條目的鏈接

print d.entries[0]['link'] 

>>> http://www.reddit.com/r/Python/comments/1oej74/functional_python_made_easy_with_a_new_
library/

使用for循環可打印所有帖子及其鏈接。

for post in d.entries:
    print post.title + ": " + post.link + "
"

>>>
Functional Python made easy with a new library: Funcy: http://www.reddit.com/r/Python/
comments/1oej74/functional_python_made_easy_with_a_new_
library/

Python Packages Open Sourced: http://www.reddit.com/r/Python/comments/1od7nn/
python_packages_open_sourced/

PyEDA 0.15.0 Released: http://www.reddit.com/r/Python/comments/1oet5m/
pyeda_0150_released/

PyMongo 2.6.3 Released: http://www.reddit.com/r/Python/comments/1ocryg/
pymongo_263_released/
.....
.......
........

輸出Feed類型和版本

print d.version      

>>> rss20

完整訪問所有HTTP標頭

print d.headers          	

>>> 
{'content-length': '5393', 'content-encoding': 'gzip', 'vary': 'accept-encoding', 'server':
"'; DROP TABLE servertypes; --", 'connection': 'close', 'date': 'Mon, 14 Oct 2013 09:13:34
GMT', 'content-type': 'text/xml; charset=UTF-8'}

隻需從標題中獲取content-type

print d.headers.get('content-type')

>>> text/xml; charset=UTF-8

使用feedparser是解析RSS feed的簡單而有趣的方法。


參考資料

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/4399.html,未經允許,請勿轉載。