Ошибка при поиске в списке - PullRequest
0 голосов
/ 01 мая 2018

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

0 голосов
/ 01 мая 2018

Убедитесь, что элемент '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 вы хотели ссылаться.

...