Что делать, если я получаю ошибку 'NoneType' object has no attribute 'text' при попытке взять текст из span тега через BS4?
Я пытаюсь спарсить данные о скидках с интернет магазина book24:
async def scraper_book24():
data = {}
url = "https://book24.ru/sales/"
req = requests.get(url, headers=headers)
src = req.text
soup = BeautifulSoup(src, "lxml")
blocks = soup.find_all("div", class_="sales-tabs-item__body")
sales = []
descriptions = []
before = []
links = []
for block in blocks:
try:
sale = block.find("a", class_="sales-tabs-item__title-link")
descript = block.find("div", class_="sales-tabs-item__desc")
bef = block.find("span")
link = sale.get("href")
except:
continue
else:
sales.append(sale.text)
descriptions.append(descript.text)
before.append(bef.text)
links.append(link)
data["sales"] = sales
data["descriptions"] = descriptions
data["before"] = before
data["links"] = links
return data
Но при запуске функции scraper_book24 я получаю ошибку
File "C:\Users\belog\book_sales_bot\parsers.py", line 39, in scraper_book24 before.append(bef.text) AttributeError: 'NoneType' object has no attribute 'text'
хотя я точно уверен, что класс тега введён правильно, да и тем более если я просто пытаюсь сделать print(bef.text), я получаю нужные мне данные. Также при выводе bef получаю нужный тег. Что я могу сделать с этой ошибкой?
Ответы (1 шт):
Автор решения: Сергей Ш
→ Ссылка
import requests
from bs4 import BeautifulSoup
url = "https://book24.ru/sales/"
req = requests.get(url).text
soup = BeautifulSoup(req, "lxml")
blocks = soup.find_all("div", class_="sales-tabs-item__body")
data =[]
for block in blocks:
sale = block.a.text
descript = block.find("div", class_="sales-tabs-item__desc").text
link = f'https://book24.ru{block.a["href"]}'
try:
bef = block.find("span").text
except Exception:
bef = "Нет акций"
data.append({"sale": sale, "descript": descript, "bef": bef, "link": link})
print(data)
[{'sale': ' Выигрывают все! ', 'descript': 'Крутите колесо удачи и выигрывайте скидку!', 'bef': ' Акция действует до 31 декабря 2022 года ', 'link': 'https://book24.ru/sales/5709406/'}, .... {'sale': ' Бесплатная доставка по России ', 'descript': 'Многие покупатели ценят бесплатную доставку, поэтому в нашем интернет-магазине она есть!', 'bef': 'Нет акций', 'link': 'https://book24.ru/sales/205489/'}]