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))

上記の例では、タイトルとリンクを2つの値のタプルとして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 に答える