Ошибка при поиске в списке
Проект, над которым я работаю, берет и открывает домашнюю страницу вики, открывает каждую ссылку на странице категории, затем берет первые 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
Вы хотели сослаться на.