"TypeError: объект 'int' не повторяется", но он отлично работает в моем другом коде - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь получить данные из https://www.teamrankings.com/, и у меня возникли некоторые трудности. В прошлом я создавал несколько подобных программ при создании CSV-файлов из веб-страниц, но эта проблема доставляет мне некоторые неудобства. Я продолжаю получать TypeError в одном конкретном цикле for, но другая программа, которая у меня есть, с практически одинаковым кодом, работает просто отлично. Я уверен, что для этого есть простое исправление, но я не смог его найти.

Я пробовал предложенные исправления, предложенные Pycharm, но ни один из них ничего не исправил. И, изменяя переменную на тип object, он говорит, что объекты типа None также не могут быть повторены.

for tr in rows:
    cells = tr.find("td")
    temp = []
    for td in cells:
        x = 0
        if(x == 2):
            temp.append(td.get_text())
        x+=1
    data.append(temp)

Я только опубликовал код, который выдавал сообщение об ошибке, но может публиковать большеесли это будет полезно. Все сообщения об ошибках были чем-то вроде TypeError, обычно TypeError: 'int' object is not iterable. Я попытался сделать с range(cells) и range(len(cells)), но оба эти исправления не удалось.

Между тем из рабочей программы (соскоб с другого сайта) работал следующий код:

for tr in rows:
    cells = div.find("right")
    temp = []
    for right in cells:
        temp.append(data.get_text())
    data.append(temp)

Для меня это выглядит одинаково, поэтому я запутался. Цель, как было сказано, состоит в том, чтобы сделать CSV, но пока не повезло.

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

find возвращает только один элемент, а не список. Возвращает первый матч. Оба кода показаны, я ожидаю увидеть сбой. findall - правильный метод для возврата списка;однако я не вижу table элементов (ни td) по указанному URI, что означает, что ваши ячейки должны быть None. Требовался ли логин?

Ваш нижний код также не должен работать из-за:

temp = []
for right in cells:
    temp.append(data.get_text())
data.append(temp)

Вы дважды используете переменную data и не используете temp, за исключением попытки добавленияэто пустой список для того, что предположительно было списком, называемым data, но в цикле вы пытались вызвать get_text() для него.

0 голосов
/ 26 октября 2019

Ошибка:

TypeError: объект 'int' не повторяется

означает, что вещь, которую вы пытаетесь повторить (например, cellsв вашем for td in cells) это не List вещей, как вы могли подумать, это одна вещь (int).

Видеть, как было определено tr (я полагаю, это былосозданный каким-то модулем Python для очистки веб-страниц, но какой именно?) упростит предложение по исправлению, но я думаю, что суть проблемы в том, что вы ожидаете, что tr.find("td") вернет список некоторой "ячейки"объект, и вместо этого он дает вам один int.

Если вы можете найти документацию, объясняющую, почему этот метод find() возвращает int, это может помочь вам найти другой метод, который вернет List, который вы ищете.

...