Объект 'str' не имеет атрибута: 'Потомки' в BeautifulSoup Python - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь получить скидки на пиццу, используя библиотеку bs4 в python. Однако, что бы я ни пытался, я всегда получаю одну и ту же ошибку: AttributeError: 'str' object has no attribute 'descendants'. Кто-нибудь, пожалуйста, помогите мне понять, что я делаю неправильно?

Вот мой код:

from bs4 import BeautifulSoup as soup
import requests
url = requests.get('https://www.papajohns.com/order/specials')
data = url.content
items = soup(data, 'html.parser')
discount_list = soup.find_all('p', {'class': 'description'}).text
for each_item in discount_list:
    print(each_item.text)

Ответы [ 3 ]

1 голос
/ 05 августа 2020

В вашем коде есть две ошибки:

Вы вызываете beautifulsoup, который вы импортировали, как soup библиотеку вместо объекта items в строке 6. Вам также необходимо удалить Предлагается атрибут .text, например @Cz_. Измените эту строку следующим образом:

discount_list = items.find_all('p', {'class': 'description'})
0 голосов
/ 05 августа 2020

Одна из возможностей заключается в том, что когда вы делаете запрос URL-адреса веб-страницы, он автоматически перенаправляет вас на другую веб-страницу, когда нет доступных специальных предложений. перенаправляется.

0 голосов
/ 05 августа 2020

Вы используете .text слишком много раз. У вас есть

discount_list = soup.find_all('p', {'class': 'description'}).text
for each_item in discount_list:
    print(each_item.text)

, где .text дважды, в первой строке и в печати. Таким образом, вы, по сути, пытаетесь выполнить .text.text, и, поскольку первый .text является str и не имеет потомков, каковым будет второй .text, вы получаете эту ошибку.

Чтобы решить эту проблему, просто измените строку discount_list на

discount_list = soup.find_all('p', {'class': 'description'})
...