‘Index’ не вызывается

#python #web-scraping #indexing

#python #очистка веб-страниц #индексирование

Вопрос:

 while (x < go):


url = "https://www.shoppingwesbite.com/search?=product"   input_a
headers = {'User-Agent': 'my user agent here'}
ok = get(url, headers=headers)
data = BeautifulSoup(ok.content, 'html.parser')

price = data.find_all('div', {"class" : "css-rey619"})[x].get_text()
title = data.find_all('div', {"class" : "css-398hol"})[x].get_text()
reviews = data.find_all('span', {'class':'css-402phy'})[x].get_text()
 

Я включил этот фрагмент кода из своего веб-скребка, и он, по сути, просто извлекает первые 10 результатов на сайте покупок для продукта, введенного пользователем. Теперь большую часть времени это работает, но иногда возвращает ошибку, в которой говорится, что индекс не вызывается для переменной «reviews», потому что я думаю, что он пытается получить отзыв для продукта, у которого еще нет отзыва. Я не знаю, как обойти это, и был бы признателен за любые предложения / идеи о том, что я мог бы попробовать. Я думал о создании некоторого логического оператора, который проверяет, есть ли в списке обзор или нет, и выводит его, если он есть, но я не знаю, как этого добиться. Спасибо!

Комментарии:

1. вы можете добавить код, чтобы проверить, нет ли проверки, игнорируйте это перед запуском цикла

2. Как бы мне этого добиться? Какой тип оператора я бы использовал? Есть ли какой-либо встроенный метод в python для этого?

3. можете ли вы опубликовать здесь какой-нибудь минимально воспроизводимый код?

4. Будет ли работать встроенная функция callable()?

Ответ №1:

Вы можете проверить длину обзоров, если она равна нулю, вы получили пустой обзор.

 for i in range(len(reviews)):
    if len(reviews[i]) == 0:
         print("you got empty review now you can easily remove it")