从FeedParser获取Feed并导入到Pandas DataFrame

时间:2017-08-15 20:29:38

标签: python pandas feedparser

我正在学习python。实践中,我使用feedparser构建一个rss scraper,将输出放入pandas数据框并尝试使用NLTK ...但我首先从多个RSS提要中获取文章列表。

我使用这篇文章介绍了如何pass multiple feeds并将其与我之前收到的关于如何将其纳入Pandas dataframe的问题的答案相结合。

问题是什么,我希望能够查看数据框中所有Feed的数据。目前,我只能访问供稿列表中的第一项。

FeedParser似乎正在做它的工作但是当把它放入Pandas df时它似乎只抓住了列表中的第一个RSS。

import feedparser
import pandas as pd

rawrss = [
    'http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml',
    'https://www.yahoo.com/news/rss/',
    'http://www.huffingtonpost.co.uk/feeds/index.xml',
    'http://feeds.feedburner.com/TechCrunch/',
    ]

feeds = []
for url in rawrss:
    feeds.append(feedparser.parse(url))

for feed in feeds:
    for post in feed.entries:
        print(post.title, post.link, post.summary)

df = pd.DataFrame(columns=['title', 'link', 'summary'])

for i, post in enumerate(feed.entries):
    df.loc[i] =  post.title, post.link, post.summary

df.shape

df

1 个答案:

答案 0 :(得分:6)

您的代码将遍历每个帖子并打印其数据。将post数据添加到数据帧的代码部分不是循环的一部分(在python缩进中是有意义的!),所以你只能看到数据帧中一个feed的数据。

您可以在遍历Feed时构建帖子列表,然后在最后创建数据框:

import feedparser
import pandas as pd

rawrss = [
    'http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml',
    'https://www.yahoo.com/news/rss/',
    'http://www.huffingtonpost.co.uk/feeds/index.xml',
    'http://feeds.feedburner.com/TechCrunch/',
    ]

feeds = [] # list of feed objects
for url in rawrss:
    feeds.append(feedparser.parse(url))

posts = [] # list of posts [(title1, link1, summary1), (title2, link2, summary2) ... ]
for feed in feeds:
    for post in feed.entries:
        posts.append((post.title, post.link, post.summary))

df = pd.DataFrame(posts, columns=['title', 'link', 'summary']) # pass data to init

你可以通过组合两个for循环来优化这一点:

posts = []
for url in rawrss:
    feed = feedparser.parse(url)
    for post in feed.entries:
        posts.append((post.title, post.link, post.summary))