TypeError: строковые индексы должны быть целыми числами при получении тега class для span span с использованием beautifulsoup - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь получить тег class из span. Проблема в том, что в div есть несколько тегов span, из которых я хочу класс. Также каждый span имеет 2 класса. Каждый раз, когда я запускаю код, я получаю следующую ошибку

TypeError: string indices must be integers

HTML, как это

<p class="card-list">
<span class="span1 class1"></span>
<span class="span2 class2"></span>
<span class="span3 class3"></span>
<span class="span4 class4"></span>
</p>

Мой код

soup = BeautifulSoup(page.read(), "html.parser")
services = soup.find_all('li', {'class': 'card-class'})

for eachitem in services:
    for contactspan in eachitem.find('p', {'class':'card-info'}):
        for element in contactspan:
            print(element["class"])

Ошибка в следующей строке

print(element["class"])

Я не могу понять, в чем проблема с этим.

1 Ответ

0 голосов
/ 27 марта 2020

Мне нужно немного больше вещей, таких как источник HTML, чтобы дать более подробный ответ, но достаточно сказать, что вы пытаетесь вызвать индексацию с именем класса в проанализированной строке, которая может принимать только целочисленные индексы.

Как насчет этого? Вход и выход с терминала i python, не обращайте внимания на эти

In [24]: html_doc = "<p class=\"card-list\"> <span class=\"span1 class1\"></span><span class=\"span2 class2\"></span><span class=\"span3 class3\"></span><span c
    ...: lass=\"span4 class4\"></span></p>"                                                                                                                     

In [25]: from bs4 import BeautifulSoup                                                                                                                          

In [26]: soup = BeautifulSoup(html_doc, 'html.parser') 
    ...:  
    ...:                                                                                                                                                        

In [27]: for para in soup.find_all('p', attrs={'class':'card-list'}): 
    ...:     for span in para.find_all('span'): 
    ...:         print(span.get('class')) 
    ...:  
    ...:      
    ...:                                                                                                                                                        
['span1', 'class1']
['span2', 'class2']
['span3', 'class3']
['span4', 'class4']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...