Задать вопрос
@ParnishkaSPB

Как получить текст при парсинге?

from bs4 import BeautifulSoup as BS
import requests
import psycopg2
import os


def pages():
    host = 'https:// www. tripadvisor .ru/'(Пробелы поставлены нарочно)
    pages1 = 'Hotels-g298507-oa'
    pages2 = '--St_Petersburg_Northwestern_District-Hotels.html'
    template = '{}{}{}{}'
    countpages = 0
    for h in range(0, 152):
        url = template.format(host, pages1, countpages, pages2)
        responce = requests.get(url).text
        html = BS(responce, 'html.parser')
        for href in html.select('.ui_column'):
            a = href.select("a")
            text = href.find_all('span', class_='text').text
            if len(a) > 0:
                print (a[0].text)
            print (text)
        countpages = (h * 10) * 3

if __name__ == '__main__':
    os.system('clear')
    pages()

Есть такой код, выдается ошибка в моменте с text = href.find_all('span', class_='text').text. Ошибка:
ResultSet object has no attribute 'text'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
Дело в том, что на странице в классом "text" есть 2-3 атрибута(стоят рядом), я не знаю как вытащить только текст из этих атрибутов, нужна помощь
  • Вопрос задан
  • 693 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 2
У Вас find_all возвращает список, у него нет такого метода.
You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
Ответ написан
Комментировать
@sunsexsurf
IT & creative
Поддержу пользователя @Sergei1337
вот тут у вас:
text = href.find_all('span', class_='text')
получается список. и поэтому выбрать текст, который там есть, можно циклом:
for i in text:
    print(i.text)

т.е. просто добавьте короткий цикл в ваш скрипт
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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