我试图从使用feedparser
库提取的RSS数据字典中提取非常具体的元素,然后将该数据放入 new 字典中,以便它可以稍后使用Flask
调用。我之所以这样做,是因为原始字典包含了大量我不需要的元数据。
我已经将这个过程分解为简单的步骤,但是在创建新词典时一直挂断!如下所示,它 创建一个字典对象,但它并不全面 - 它只包含单篇文章的标题,URL和描述 - 其余部分缺席。
我尝试过转换到其他RSS Feed并获得相同的结果,所以看起来问题就是我尝试这样做的方式,或者问题出现了问题。 feedparser
生成的列表结构。
这是我的代码:
from html.parser import HTMLParser
import feedparser
def get_feed():
url = "http://thefreethoughtproject.com/feed/"
front_page = feedparser.parse(url)
return front_page
feed = get_feed()
# make a dictionary to update with the vital information
posts = {}
for i in range(0, len(feed['entries'])):
posts.update({
'title': feed['entries'][i].title,
'description': feed['entries'][i].summary,
'url': feed['entries'][i].link,
})
print(posts)
最终,我希望有一个类似下面的词典,除了它继续发表更多文章:
[{'Title': 'Trump Does Another Ridiculous Thing',
'Description': 'Witnesses looked on in awe as the Donald did this thing',
'Link': 'SomeNewsWebsite.com/Story12345'},
{...},
{...}]
某事告诉我这是一个简单的错误 - 也许语法已经关闭,或者我忘记了一个小而重要的细节。
答案 0 :(得分:3)
您提供的代码示例一遍又一遍地对同一个dict执行update
。所以,你只能在循环结束时获得一个dict。您的示例数据显示的是,您实际上需要list
字典:
# make a list to update with the vital information
posts = []
for entry in feed['entries']:
posts.append({
'title': entry.title,
'description': entry.summary,
'url': entry.link,
})
print(posts)
答案 1 :(得分:2)
似乎问题是您使用的是dict而不是列表。然后你要更新dict的相同键,所以每次迭代都会覆盖最后添加的内容。
我认为以下代码可以解决您的问题:
from html.parser import HTMLParser
import feedparser
def get_feed():
url = "http://thefreethoughtproject.com/feed/"
front_page = feedparser.parse(url)
return front_page
feed = get_feed()
# make a dictionary to update with the vital information
posts = [] # It should be a list
for i in range(0, len(feed['entries'])):
posts.append({
'title': feed['entries'][i].title,
'description': feed['entries'][i].summary,
'url': feed['entries'][i].link,
})
print(posts)
因此,您可以看到上面的代码将posts变量定义为列表。然后在循环中我们将dicts添加到此列表中,因此它将为您提供所需的数据结构。
我希望能帮助您解决这个问题。