1

我在一段时间内遇到了这个基本问题,但不确定问题是什么。我在运行以下代码时收到的错误是:

AttributeError: 'list' object has no attribute 'find'

这是代码:

import xml.etree.ElementTree as ET
import requests

r = requests.get('http://www.11alive.com/rss/local/3/10.xml')

root = ET.fromstring(r.text.encode('utf-8'))

channel = root.find('channel')

items = channel.findall('item')

news = []   
for i in range(3):
    news.append(items.find('title').text)
    news.append(items.find('link').text)

print news
4

2 回答 2

4

您只需对items列表进行切片:

for item in items[:3]:
    news.append((item.find('title').text, item.find('link').text))

在上面的示例中,我还将标题和链接作为二值元组添加到news列表中。

对于您的示例提要,导致:

[('The Autism Gap: What Works', 'http://www.11alive.com/rss/article/278819/3/The-Autism-Gap-What-Works'), ('Adairsville effort continues with concert ', 'http://www.11alive.com/rss/article/279178/3/Adairsville-effort-continues-with-concert-'), ('Gold Coast Salads expands seafood salad recall on Listeria fears', 'http://www.11alive.com/rss/article/279147/3/Gold-Coast-Salads-expands-seafood-salad-recall-on-Listeria-fears')]

您也可以简化item查找:

items = root.findall('channel/item')

不过,您确实想查看feedparser 库;它处理多种提要格式以及正确处理缓存和清理等问题。

于 2013-02-24T12:45:38.583 回答
0

for循环中,您需要遍历单个字符串,而不是整个列表。为此,您将 i 迭代器放入 for 循环中,如下所示:

for i in range(3):
    news.append(items[i].find('title').text)
    news.append(items[i].find('link').text)

这将为您提供 6 个项目的简单列表。(title[0], link[0], title[1], link[1], title[2], link[2])

于 2013-02-24T12:43:55.577 回答