AttributeError: у объекта 'NoneType' нет атрибута 'get_text', мешающего мне продолжать - PullRequest
0 голосов
/ 13 апреля 2020

Я новичок в изучении Python и пытаюсь создать приложение для веб-скребка, но столкнулся со следующей ошибкой. Это не полный код, но я не могу go опередить, если эта проблема не будет решена первой.

Любая помощь будет высоко оценена!

AttributeError : Объект 'NoneType' не имеет атрибута 'get_text'

import requests
from bs4 import BeautifulSoup

url = "https://www.amazon.co.uk/b?node=13978643031&pf_rd_r=7WY9X56GFTSX0ZTD0VQQ&pf_rd_p=7510143e-2d7f-4e64-a435-f4e242b0abc4"
headers = {
    "user-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"}
price = 389


def getPrice():
    page = requests.get(url, headers=headers)
    soup = BeautifulSoup(page.content, 'html.parser')
    title = soup.find(id="productTitle").get_text().strip()
    print(title)


if __name__ == "__main__":
    getPrice()

Ошибка:

Traceback (последний вызов был последним): файл " /Users/sumeet/vs_code_py/app.py ", строка 18, в файле getPrice ()" /Users/sumeet/vs_code_py/app.py ", строка 13, в getPrice title = soup.find (id =" productTitle ") .get_text (). strip () AttributeError: у объекта 'NoneType' нет атрибута 'get_text'

1 Ответ

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

Вероятно, проблема в том, что метод BeautifulSoup.find() не нашел ничего с id='productTitle', поэтому вы пытаетесь получить текст несуществующего элемента, представленного в Python как примитив None. Вам нужно добавить несколько логик c, чтобы учесть эту возможность, используя if/else или try/except (если, конечно, это действительно работает на других страницах? Если нет, возможно, вы не ищете нужную вещь)

Кроме того, как отмечено в комментариях, если элемент, который вы ищете, создан Javascript (что выглядит так, как есть), то причина, по которой вы его не находите, заключается в том, что он не существует в этап, который вы очищаете. Вам нужно что-то вроде Selenium, которое на самом деле выполнит Javascript.

...