индексы списка должны быть целыми числами или частями, а не str error Python - PullRequest
1 голос
/ 11 марта 2020

Мой код ниже. Это код для разбора ссылок с URL. У меня есть диктонарность 2 URL:

newsurls = {'Kommersant': 'https://www.kommersant.ru/RSS/news.xml',
            'Vesti': 'https://www.vesti.ru/vesti.rss'}


class News:
    def __init__(self, rss_dict):
        self.rss_dict = rss_dict
        self.parseRSS()
        self.get_links()

    def parseRSS(self):
        for key, url in self.rss_dict.items():
            return feedparser.parse(url)

    def get_links(self):

        allfeed = []
        for key, url in newsurls.items():
            feed = News.parseRSS(self)
            allfeed.extend(feed)

        links = []

        alllinks = []

        for newsitem in allfeed['items']:
            links.append(newsitem['link'])

        for key, url in self.rss_dict.items():
            alllinks.extend(links)
        self.alllinks = alllinks

        for l in alllinks:
            print(l)


News(newsurls)

У меня ошибка TypeError: list indices must be integers or slices, not str в строке for newsitem in allfeed['items']:

Я думаю, у меня есть проблема, потому что это list из dictonaries, как я могу я оптимизирую этот код?

TypeError                                 Traceback (most recent call last)
<ipython-input-43-7e99e79bbd4b> in <module>()
----> 1 News(newsurls)

<ipython-input-42-a003b05ebeb5> in __init__(self, rss_dict)
      3         self.rss_dict = rss_dict
      4         self.parseRSS()
----> 5         self.get_links()
      6 
      7 

<ipython-input-42-a003b05ebeb5> in get_links(self)
     22         alllinks = []
     23 
---> 24         for newsitem in allfeed['items']:
     25             links.append(newsitem['link'])
     26 

TypeError: list indices must be integers or slices, not str

Ответы [ 3 ]

1 голос
/ 11 марта 2020

Причина, по которой вы получаете это ошибка, заключается в том, что allfeed - это список, определенный в строке 17 (allfeed = []). Чтобы исправить это, просто замените

for newsitem in allfeed['items']:

на

for newsitem in allfeed:
0 голосов
/ 11 марта 2020
alllinks = []

for newsitem in allfeed['items']:

выше - линии преступника, либо определены

alllinks = {}

, либо используются

for newsitem in allfeed
0 голосов
/ 11 марта 2020

Трудно понять, что вы пытаетесь сделать, но я думаю, что это так:

    links = []
    for key, url in self.rss_dict.items():
        feed = feedparser.parse(url)
        for newsitem in feed['items']:
            links.append(newsitem['link'])
...