@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'
  • Вопрос задан
  • 78 просмотров
Решения вопроса 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 или по другому смотря на чем.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы