Python Объект 'int' не повторяется при использовании len в списке из Beautifulsoup - PullRequest
0 голосов
/ 28 января 2020

Пока у меня есть следующий код, я включаю весь его на случай, если он поможет

import requests
from bs4 import BeautifulSoup

URL = 'https://projects.fivethirtyeight.com/2020-nba-predictions/games/'
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')

todays_games = soup.find('div', class_="games-section extra-space-0")

stats = []
for games in len(list(todays_games.children)):
    game = list(todays_games.children)[games]

, и я получаю ошибку

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-13-39f21f5da0b0> in <module>
      1 #This is the main new feature of this version. A for loop to perform the operation for all the games of that day
      2 stats = []
----> 3 for games in len(list(todays_games.children)):
      4     game = list(todays_games.children)[games]
      5     game_body = game.body

TypeError: 'int' object is not iterable

Если я это сделаю type() on list(todays_games.children) и Len(list(todays_games.children)) Я получаю «список» и длину, которая в данном конкретном случае равна 6 для этого конкретного случая, поэтому я не понимаю, почему я получаю эту ошибку. Есть идеи?

1 Ответ

1 голос
/ 28 января 2020

len(list(todays_games.children)) оценивается как целое число - 5, 6 и т. Д. c. Вы не можете выполнять итерацию непосредственно по целому числу с помощью for для l oop.

. Вы можете использовать встроенную функцию от range до l oop установленное количество раз, если вам нужно, но вы должны выполнять итерацию непосредственно над todays_games.children.

Большая часть Python заключается в том, что он упрощает использование итератора. Вместо того, чтобы использовать индексы для доступа к таким вещам, как массив, (запрашивая 5-й элемент и т. Д. c), вы можете напрямую получить доступ к элементу с помощью для l oop.

for game in todays_games.children:
    curr_game  = game.body
    do_something_else(curr_game)

сравните это с

for i in range(len(todays_games.children)):
    curr_game = todays_games.children[i].body
    do_something_else(curr_game)
```.
...