我正在使用feedparser来解析诸如https://www.relay.fm/analogue/feed之类的rss提要,并且无法弄清楚如何明确标识itunes:category
的值。
看着feedparser itunes tests,看来itunes:keywords
和itunes:category
的值都放在了feed['tags']
字典中。
来自category
的测试:
<!--
Description: iTunes channel category
Expect: not bozo and feed['tags'][0]['term'] == 'Technology'
-->
<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
<channel>
<itunes:category text="Technology"></itunes:category>
</channel>
</rss>
然后是keywords
:
<!--
Description: iTunes channel keywords
Expect: not bozo and feed['tags'][0]['term'] == 'Technology' and
'itunes_keywords' not in feed
-->
<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
<channel>
<itunes:keywords>Technology</itunes:keywords>
</channel>
</rss>
对于上面的示例供稿,条目为:
<itunes:keywords>Hurley, Liss, feelings</itunes:keywords>
和
<itunes:category text="Society & Culture"/>
<itunes:category text="Technology"/>
将feed[tags]
填充为:
[{'label': None, 'scheme': 'http://www.itunes.com/', 'term': 'Hurley'},
{'label': None, 'scheme': 'http://www.itunes.com/', 'term': 'Liss'},
{'label': None, 'scheme': 'http://www.itunes.com/', 'term': 'feelings'},
{'label': None,'scheme': 'http://www.itunes.com/','term': 'Society & Culture'},
{'label': None, 'scheme': 'http://www.itunes.com/', 'term': 'Technology'}]
有什么方法可以唯一地标识来自itunes:category
标记的值?
答案 0 :(得分:0)
仅凭feedparser我找不到一种方法,所以我也使用了beautifulsoup:
import bs4
soup = bs4.BeautifulSoup(raw_data, "lxml")
def is_itunes_category(tag):
return tag.name == 'itunes:category'
categories = [tag.attrs['text'] for tag in soup.find_all(is_itunes_category)]
答案 1 :(得分:0)
Feedparser v.6.0.2 实现特定的 itunes:x
属性
itunes:category
在 feedparser 中可用作 category
import feedparser
feedp = feedparser.parse(url)
category = feedp.feed.category
itunes:keywords
确实在 feedparser 中重命名为 tags
并填充到 term
但渠道关键字与项目关键字混合
要单独识别项目关键字,请使用 scheme
作为过滤器
import feedparser
feedp = feedparser.parse(url)
#get all the keywords both item and channel
keywords = [k["term"] for k in feedp["feed"]["tags"]]
# get the keywords from all the items
keyword = [t["term"] for t in feedp["feed"]["tags"] if t["scheme"] == 'http://www.itunes.com/']
这可能会删除其他标签(如果可用),但如果 itunes:keywords 和标签共存,则它们是重复的。
itunes:duration
可用作 itunes_duration
import feedparser
feedp = feedparser.parse(url)
duration = feedp["itunes_duration"]
有点跑题,但要完成答案:
如果有多个类别可用,它们在类别中公开为元组 如documentation
中所述>>>import feedparser
>>>feedp = feedparser.parse(url)
>>>categories = feedp.feed.categories
>>>print(categories)
>>>[(u'Syndic8', u'1024'),
(u'dmoz', 'Top/Society/People/Personal_Homepages/P/')]
但 iTunes 没有多个类别...
不再需要用 beautifulSoup4
再次解析。