Я пытаюсь прочитать файл с 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])
использование
appArray = [line.rstrip() for line in open('applications.txt')]
В конце каждой строки есть новая строка. Readlines возвращает каждую строку строки с символом новой строки в конце. И запросы принимают appId с новой строкой. Как "com.android.chrome\n" вместо "com.android.chrome".
Следующая строка является источником вашей ошибки:
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
блока.
response
являетсяNone
илиhtml_soup.find(class_="AHFaub")
возвращаетNone
.