Ошибка с парсером на python

Пишу простой парсер новостей на python.

import requests
from bs4 import BeautifulSoup

url="https://tproger.ru/news/"
response = requests.get(url)

soup = BeautifulSoup(response.content, "html.parser")

post_title = soup.findAll('div', class_="post-title")
post_entry = soup.findAll('div', class_="entry-content")

try:
    while True:
        title = post_title.find("h2", class_="entry-title").get_text(strip=True)
        entry = post_entry.find("p").get_text(strip=True)
except:
    print("Конец:)")

Компилятор выдает ошибку

AttributeError: ResultSet object has no attribute 'find'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?

Может быть для вас тут все просто, но я только начинаю. Не ругайтесь:)


Ответы (1 шт):

Автор решения: Дмитрий Галкин

soup.findAll возвращает объекты типа List, которые содержат n элементов типа bs4.element.Tag. post_title и post_entry это списки, а title с entry являются ссылками на эти списки. У списков нет метода .find, они есть у объекта bs4.element.Tag. Соответственно тебе надо проитерироваться по полученному списку, чтобы получить доступ к тегу, у которого есть метод find. Исключение как раз об этом и говорит. Если хочешь можем созвонится и разобрать вместе.

Бесконечный цикл кстати здесь совершенно зря, ты из него не выйдешь

→ Ссылка