Ошибка атрибута BeautifulSoup с Python (парсинг веб-страниц)

Я следую руководству по парсингу веб-страниц с помощью Python, и пока что у меня есть следующее:

import requests
from bs4 import BeautifulSoup

URL = 'https://www.amazon.de/JBL-Charge-Bluetooth-Lautsprecher-Schwarz-      integrierter/dp/B07HGHRYCY/ref=sr_1_2_sspa?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&  keywords=jbl+charge+4&qid=1562775856&s=gateway&sr=8-2-spons&psc=1'
headers = {
    "User-Agent": 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Mobile Safari/537.36'}
page = requests.get(URL,headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')
title = soup.find(id="productTitle").get_text()
print(title.strip())





Я пытаюсь напечатать название какого-то продукта из Amazon, но получаю эту ошибку: AttributeError: объект «NoneType» не имеет атрибута «get_text» всякий раз, когда я пытаюсь запустить метод get_text () из библиотеки BeautifulSoup. Как я могу успешно распечатать название продукта?


person moro_92    schedule 10.11.2019    source источник


Ответы (2)


get_text() не работает, потому что ваш селектор не нашел подходящий элемент и вместо этого вернул None. Итак, вы вызываете его для пустого элемента, у которого нет метода get_text(). Я не уверен, почему id=productTitle не работает, глядя на HTML, который он должен imo. Однако вы можете использовать другой селектор и вместо этого получить div над ним, чтобы получить аналогичный результат:

title = soup.find(id="title").get_text()
print(title.strip())

Результатом этого является:

"JBL Charge 4 Bluetooth-Lautsprecher in Schwarz, Wasserfeste, portable Boombox mit integrierter Powerbank, Mit nur einer Akku-Ladung bis zu 20 Stunden kabellos Musik streamen"
person Max Kaha    schedule 10.11.2019

Попробуйте следующее:

title = soup.find('span', id="productTitle").get_text()

Это должно сработать.

person mojoman    schedule 30.03.2021