我正在学习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
答案 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))