Ошибка при поиске в списке

Проект, над которым я работаю, берет и открывает домашнюю страницу вики, открывает каждую ссылку на странице категории, затем берет первые 10 ссылок на каждой странице категории и записывает их в файл.

Код:

url_list = open('url_list', 'w')

counter = 0

urls = []

html = urllib.request.urlopen('https://commons.wikipedia.org/wiki/Main_Page')

soup = bs.BeautifulSoup(html, 'lxml')

for item in soup.find_all('a'):
    urls.append(item.get('href'))

    for item in urls:

        if 'Category' in item:
            page = urllib.request.urlopen('https://commons.wikipedia.org/' + item)

            soup = bs.BeautifulSoup(page, 'lmxl')

            if counter < 10:
                for item in soup.find_all('a'):
                    url_list.write(item.get('href'))

                    counter += 1

url_list.close()

Когда я запускаю код, я получаю эту ошибку типа:

Traceback (most recent call last):
File "/Users/huntergary/Web_links.py", line 42, in <module>
main()
File "/Users/huntergary/Web_links.py", line 23, in main
if 'Category' in item:
TypeError: argument of type 'NoneType' is not iterable

1 ответ

Проверьте, что 'href' товар возвращается перед его добавлением или проверкой item прежде чем пытаться увидеть, если 'Category' находится в нем:

href = item.get('href')
if href is not None:
    urls.append(href)

Или же,

if item is not None and 'Category' in item:

Любой подход должен помешать вам проверить None объекты в вашем urls список.

В качестве примечания, вы должны рассмотреть возможность повторного использования имени переменной item три раза во вложенном контексте, как это. В более глубоких слоях кода не всегда ясно, какие item Вы хотели сослаться на.

Другие вопросы по тегам