@Wekery

Как исправить AttributeError: 'NoneType' object has no attribute 'find_all'?

Гуглил долго, а до сих пор не могу понять, в чём ошибка?
Выдаёт кучу строк с ошибками, вот одна из них: AttributeError: 'NoneType' object has no attribute 'find_all'
Можете попробовать сами вставить этот код.
Я пытаюсь ускорить парсинг сайта по категориям, и я пока что новичок в этой теме, пытаюсь разобраться. Буду очень благодарен если сможете помочь

Вот код:
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import asyncio
import aiohttp


async def get_page_data(session, page):
    HEADERS = {"User-Agent": UserAgent().random}
    url = f"https://biggeek.ru/catalog/apple?page={page}"

    async with session.get(url=url, headers=HEADERS) as response:
        response_text = await response.text()

        soup = BeautifulSoup(response_text, "lxml")

        items = soup.find("div", class_="catalog-content__prods-list").find_all("div", class_="catalog-card")

        for j in items:
            try:
                name = j.find("a", class_="catalog-card__title cart-modal-title").text.strip()
            except:
                name = "Нет такого названия"

            try:
                price = j.find('b', class_="cart-modal-count").text.strip()
            except:
                price = "Нет такой цены"
            O = []
            O = name
            if O.count("Обложка Apple Smart Folio для iPad Pro 12,9 дюйма (дизайн 2022)") == 1:
                n = (name + "\n" + price)
        print(n)


async def gather_data():
    HEADERS = {"User-Agent": UserAgent().random}
    url = "https://biggeek.ru/catalog/apple"

    async with aiohttp.ClientSession() as session:
        response = await session.get(url=url, headers=HEADERS)
        soup = BeautifulSoup(await response.text(), "lxml")
        pages_count = int(
            soup.find("div", class_="prod-pagination").find_all("a", class_="prod-pagination__item")[-1].text)

        tasks = []

        for page in range(1, pages_count + 1):
            task = asyncio.create_task(get_page_data(session, page))
            tasks.append(task)

        await asyncio.gather(*tasks)


def main():
    asyncio.run(gather_data())


if __name__ == "__main__":
    main()
  • Вопрос задан
  • 40 просмотров
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
1. Нужно приводить сообщение об ошибке полностью. Всё целиком что пишется в терминал. Там исчерпывающая информация о том, что конкретно и где пошло не так.
2. Если вы не способны читать сообщения об ошибках, то вам надо учиться на более простых примерах. Сейчас же ваша проблема выглядит так, что вы совершенно не умея программировать и не зная основ пытаетесь с помощью данного ресурса решить свою какую-то задачу.
3. У вас в коде только два места. где происходит вызов метода find_all. В котором конкретно ваша проблема указано в подробном сообщении об ошибке, которое вы не потрудились привести.
4. 'NoneType' object has no attribute 'find_all' означает, что вы пытаетесь вызвать метод у объекта, у которого нет этого метода. Видно даже у какого объекта - у Null.
5. Если вам этих намёков не достаточно, то вам следует взять учебник по питону и начинать учиться с простого. Или обратитесь к фрилансерам за помощью.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы