如何从XML返回值(标题,公共日期,链接)然后将其存储到列表中?



我正在使用PYTHON类和The ElementTree XML

这是我目前为止的代码:

class Story():
def __init__(self, title, link, pub_date):
# TODO: your code here
self.title = title
self.link = link
self.pub_date = pub_date
def __str__(self):
# TODO: your code here
return self.title + '. (' + self.pub_date + ')' + 'n' + self.link

解析XML代码:

import urllib.request
import xml.etree.ElementTree as ET
url = 'https://www.yahoo.com/news/rss'
with urllib.request.urlopen(url) as response:
data = response.read()
root = ET.fromstring(data)
channel = root[0]
for news_title in channel.iter('title'):
print(news_title.text + 'n')
for news_pub_date in channel.iter('pubDate'):
print(news_pub_date.text + 'n')
for news_link in channel.iter('link'):
print(news_link.text + 'n')

我可以打印标题、公开日期和链接,但它们是分开的。那么,我如何结合类将内容存储在列表中以打印这样的结果:

白宫有132个房间和自己的餐厅。以下是乔·拜登的新家。https://news.yahoo.com/us炸弹-设备-叙利亚-使用- 003717572. - html

为什么德克萨斯州的暴风雪吸引了反拜登的阴谋论?(2021 - 02 - 26 - t00:37:17z)https://news.yahoo.com/sturgeon爆炸-萨尔蒙德-面临索赔- 193113374. - html

这个问题的要求是我需要创建一个def来获取内容并将其返回到列表中:

def get_contents(source='yahoo') -> List[content]:
contents = []
# Do some code here
return contents

谢谢你的帮助。

下面是针对您提供的XML的更有效的列表推导:

contents = [[ch[0].text,ch[1].text, ch[2].text] for ch in channel[8:]]

这与下面的代码相同,但不需要遍历每个标题、pubDate或链接。

这似乎是使用列表推导式(old)的可行解决方案:

titles = [nt.text for nt  in channel.iter('title')]
dates = [pd.text for pd  in channel.iter('pubDate')]
links = [nl.text for nl  in channel.iter('link')]
contents = [[titles[i], dates[i], links[i]] for i in range(len(titles)-1)]

您可以使用findall()获得所有item元素,然后使用find()从每个item中获得title,linkpubDate子元素,例如:

import urllib.request
import xml.etree.ElementTree as ET
url = 'https://www.yahoo.com/news/rss'
with urllib.request.urlopen(url) as response:
data = response.read()
root = ET.fromstring(data)
for item in root.findall('channel/item'):
print(item.find('title').text)
print(item.find('link').text)
print(item.find('pubDate').text)
print()

相关内容

  • 没有找到相关文章

最新更新