AttributeError: у объекта 'NoneType' нет атрибута 'текст' Python

1

Я пытаюсь прочитать файл с python и получить каждую строку в качестве параметра для функции. У меня есть атрибут AttributeError: "NoneType" не имеет атрибута "текст", и я не понимаю, как его исправить. Вот мой код

from requests import get
from bs4 import BeautifulSoup


file = open("applications.txt","r")
appArray = file.readlines()


def app_metadata(app_link):
    url = 'https://play.google.com/store/apps/details?id=' + app_link
    response = get(url)
    html_soup = BeautifulSoup(response.text, 'html.parser')
    print(html_soup.find(class_="AHFaub").text)


#print (appArray[0])
#print(type(appArray[0]))
#print(type("com.codebrewgames.pocketcitygame"))
app_metadata(appArray[2])
  • 3
    Единственное правдоподобное объяснение здесь заключается в том, что response является None или html_soup.find(class_="AHFaub") возвращает None .
  • 1
    Пожалуйста, всегда включайте полное отслеживание ошибок в ваши вопросы.
Показать ещё 3 комментария
Теги:

2 ответа

1
Лучший ответ

использование

appArray = [line.rstrip() for line in open('applications.txt')]                                                                                                     

В конце каждой строки есть новая строка. Readlines возвращает каждую строку строки с символом новой строки в конце. И запросы принимают appId с новой строкой. Как "com.android.chrome\n" вместо "com.android.chrome".

0

Следующая строка является источником вашей ошибки:

print(html_soup.find(class_="AHFaub").text)

html_soup.find(class_="AHFaub") не находит нужный раздел при анализе ответа и, таким образом, возвращает None. Одно исправление будет следующим:

result = html_soup.find(class_="AHFaub")
if result:
    print(result.text)

Это проверяет, есть ли достоверный результат перед попыткой печати. Это считается подходом LBYL (посмотрите, прежде чем прыгать).

Более питоновский подход заключается в том, чтобы следовать методу EAFP (проще просить прощения, чем разрешение) следующим образом:

try:
    print(html_soup.find(class_="AHFaub").text)
except AttributeError:
    print('Failed to parse url: {}'.format(url))

Этот метод пытается выполнить печать, и если он не выполняется из-за AttributeError он пропустит его и выполнит любой код, следующий за except блока.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню