Python Объект 'NoneType' не имеет атрибута 'attrs' - PullRequest
0 голосов
/ 13 апреля 2020

Я немного тестирую Python и следую некоторым урокам, но я застрял на этом:

urls = []
for h3_tag in soup.find_all("h3"):
    a_tag = h3_tag.find('a')
    urls.append(a_tag.attrs['href'])
print(urls)

Это должно получить "a" внутри набора h3. И это так, но когда я затем добавляю .attrs ['href'] или .text, чтобы получить привязку URL или сам URL, я продолжаю получать эту ошибку: AttributeError: У объекта 'NoneType' нет атрибута 'attrs'

Кажется, я не могу понять ...

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Как указано chitown88, вы должны убедиться, что h3_tag.find('a') не возвращает None.

Однако не следует делать это с неограниченными операторами try и except. Это может затруднить устранение неисправностей в будущем. Альтернативой моей версии было бы просто поставить KeyError после условия исключения. т.е. except KeyError:

Подробнее см. здесь


Вот мой предпочтительный способ справиться с этим

urls = []

for h3_tag in soup.find_all("h3"):
    # Get the a-tag or set a_tag to None if no a-tag is found
    a_tag = h3_tag.find('a')

    # Guarantee that we were able to find an a-tag
    if a_tag:        
        # Guarantee that the a_tag has an `href` attribute
        if a.get('href'):
            urls.append(a_tag.attrs['href'])

print(urls)

Надеюсь, это поможет!

0 голосов
/ 13 апреля 2020

, если он не находит тег a, то вы не можете получить атрибут href, даже если он есть. Я бы включил попытку / кроме как здесь, или, как указано в комментарии, проверьте, если это None

urls = []
for h3_tag in soup.find_all("h3"):
    try:
        a_tag = h3_tag.find('a')
        urls.append(a_tag.attrs['href'])
    except:
        continue
print(urls)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...