Хорошо, слишком много неправильных вещей;
pokemon_types1
объект - это массив, вы должны выполнить итерацию и выполнить операции с каждым элементом в этом массиве. Вы не можете использовать метод .find_next_sibling
для array
, потому что у объекта array
нет метода как find_next_sibling
.
А также есть еще одна проблема, которую вы пытаетесь использовать find_next_sibling
после того, как вы получите текст в pokemon_types1
. Так что это больше не элемент BeautifulSoup, а просто строка.
Вы также получаете дубликаты элементов при использовании type_.find(class_ = 'type-icon').get_text()
![enter image description here](https://i.stack.imgur.com/ld7a2.png)
Я предлагаю вам использовать что-то подобное:
from bs4 import BeautifulSoup
import requests
page = requests.get('https://pokemondb.net/pokedex/all')
soup = BeautifulSoup(page.content, 'html.parser')
dex = soup.find(id = 'pokedex').find("tbody")
rows = dex.find_all("tr")
poke_dex = {}
for row in rows:
poke_name = row.find(class_ = "ent-name").get_text()
poke_dex[poke_name] = {}
poke_dex[poke_name]["types"] = [i.get_text() for i in row.find_all(class_ = 'type-icon')]
print(poke_dex)
Вывод
{'Abomasnow': {'types': ['Grass', 'Ice']},
'Abra': {'types': ['Psychic']},
'Absol': {'types': ['Dark']},
'Accelgor': {'types': ['Bug']},
'Aegislash': {'types': ['Steel', 'Ghost']},
'Aerodactyl': {'types': ['Rock', 'Flying']},
'Aggron': {'types': ['Steel']},
'Aipom': {'types': ['Normal']},
'Alakazam': {'types': ['Psychic']},
'Alcremie': {'types': ['Fairy']},
'Alomomola': {'types': ['Water']},
'Altaria': {'types': ['Dragon', 'Fairy']},
'Amaura': {'types': ['Rock', 'Ice']},
'Ambipom': {'types': ['Normal']},
'Amoonguss': {'types': ['Grass', 'Poison']},
'Ampharos': {'types': ['Electric', 'Dragon']},
'Anorith': {'types': ['Rock', 'Bug']},
.
.
.
.
После этого вы можете импортировать его в pandas, извините, я у меня нет опыта работы с pandas, поэтому я не могу дать вам пример, чтобы показать, как это делается.