Задать вопрос
@66656665
22 года

Почему парсер выдает ошибку?

Ребят, файл удалился, делаю на скорую руку, уже мозги кипят, помогите разобраться.

import requests
from bs4 import BeautifulSoup

HEADERS = {
    
      'User-Agent': 'тут юзер аджент',
      'Accept':'тут ассепт'


    }

HOST = 'https://www.sravni.ru/bank/sberbank-rossii/'
URL = HOST + 'otzyvy/'

def get_html(url, params = ''):
    r = requests.get(url,headers =HEADERS, params=params)
    return r

def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all('div', class_ ='_227VT')
    otzivi = []

    for item in items:
        
        otzivi.append(

            {
                'name': item.find('div', class_='_1tvOC r2Q86').find('div', class_='_3qkdy _7QkVd').find('div', class_='_3bNvn').find('div', class_='_1ubS9 yHpsJ').find('div', class_='_1ubS9 yHpsJ').find('span').get_text()
          

 
                
            }
        )
    return otzivi


html = get_html(URL)
print(get_content(html.text))


ОШИБКА:
Traceback (most recent call last):
File "C:\Users\Я\AppData\Local\Programs\Python\Python38-32\d.py", line 40, in
print(get_content(html.text))
File "C:\Users\Я\AppData\Local\Programs\Python\Python38-32\d.py", line 29, in get_content
'name': item.find('div', class_='_1tvOC r2Q86').find('div', class_='_3qkdy _7QkVd').find('div', class_='_3bNvn').find('div', class_='_1ubS9 yHpsJ').find('div', class_='_1ubS9 yHpsJ').find('span').get_text()
AttributeError: 'NoneType' object has no attribute 'find'
  • Вопрос задан
  • 110 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Зачем стрелять себе в ногу, если они все отзывы отдают json'ном? Вот простой код:
import requests
import json

import requests
headers = {
    'content-type': 'application/json',
}

data = '''{"filter":{"rated":"Any",
					"orderBy":"WithRates",
					"tag":"",
					"reviewObjectId":276,
					"reviewObjectType":"banks",
					"page":"1",
					"pageSize":20,
					"locationRoute":"",
					"regionId":"",
					"logoTypeUrl":"banks"
					}}'''

response = requests.post('https://www.sravni.ru/provider/reviews/list',data=data,headers=headers)

reviews = json.loads(response.text)

total = reviews['total']

print(f'Всего отзывов: {total}')

for review in reviews['items']:
	title = review['title']
	text = review['text']
	print(f'{title} - {text}')

Так как всего отзывов 8718, а на каждой странице по 20 отзывов - получаем 436 страниц. Меняем параметр page в запросе от 1 до 436 и получаем все отзывы в удобном виде.
Структура json:
5f9da3b368e7d183722613.png
Ответ написан
Комментировать
@shadrin_ss
Junior
У тебя ничего нет по пути который ты ищешь, он тебе черным по белому пишет NoneType пусто!
Если у тебя будут часто пустые элементы то ищи лучше списком findAll или по другому смотря на чем.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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