2017-08-15 10 views
0

私はPythonを学んでいます。練習としては、フィードパーザーを使ってrand scraperを構築して、パンダのデータフレームに出力し、NLTKで掘り下げようとしています...しかし、最初に複数のRSSフィードから記事のリストを取得しています。FeedParserからフィードを取得し、Pandas DataFrameにインポート

私はpass multiple feedsの方法についてこの投稿を使用し、それをPandas dataframeに取得する方法について別の質問に以前に回答しました。

問題点は、私のデータフレーム内のすべてのフィードからデータを見ることができるようにすることです。現在、私はフィードのリストの最初の項目にしかアクセスできません。

FeedParserは仕事をしているようだが、パンダスに入れるとリストの最初の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

問題は、DataFrameの最後のフィードからのデータしか表示されていないことですか? DataFrame内のすべてのフィードのデータが必要ですか? – beenjaminnn

+0

はい。申し訳ありませんが、私はこれを編集して明確化します。 –

答えて

1

コードは各投稿をループしてデータを印刷します。ポストデータをデータフレームに追加する部分は、ループの一部ではありません(pythonインデントでは意味があります)、データフレーム内の1つのフィードのデータのみが表示されます。

あなたがフィードを通してあなたループとしての記事のリストを作成した後、最後にデータフレームを作成することができます

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 

あなたは少しループのための2つを組み合わせることで、この最適化することができます:

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

ありがとう、それは完全に動作します。また、くぼみやその効果についても正しく教えてくれました。また、最適化されたバージョンのおかげで、私はあなたがそこで何をしたのか理解して理解しています。 –

関連する問題