StupidQuestion
@StupidQuestion
Задаю глупые вопросы...

Почему не итерируется?

import requests
import csv
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome(executable_path=r"путь")

driver.get("какой то сайт")

allurl = []

for i in driver.find_elements_by_tag_name('a'):
    allurl.append(i.get_attribute('href'))

print(allurl)   # выводит список как он есть

print(type(allurl))   # тип <class 'list'>

with open('url.csv', 'w', newline='') as fcsv:
    writers = csv.writer(fcsv, delimiter=',')
    for line in allurl:
        writers.writerows(line)
        
driver.close()


Почему ошибка?
writers.writerows(line) 
"TypeError : 'NoneType' object is not iterable"?


Я ж по итерируемому объекту "бегу"...или я что то не так понял...
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
@o5a
Александр, ошибка с Nonetype означает, что у каких-то из найденных тэгов <a> отсутствует href, в результате в список записывается None, т.е.
alllist = ['url1', 'url2', ..., None, ... ]
Само по себе это не было бы проблемой в списке, но writerow предполагает, что каждый элемент - это список данных (список колонок для csv), а передаете просто строку, поэтому он пытается ее итерировать (т.е. строки он будет записывать побуквенно через разделитель). А None итерировать он уже не может, поэтому и ругается.
Поправить можно так:
for line in allurl:
    writers.writerow([line])

Можно сразу делать проверку, что href есть, чтобы не пихал пустые значения в список.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sswwssww
@sswwssww
for line in allurl:
        writers.writerows(line)

замени на:
writers.writerows(allurl)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы