Я очищаю свой местный сайт для объявлений о покупке / аренде квартир.
В некоторых случаях я получаю ошибку IndexError: list index вне диапазона.
Я получаю ошибки, в то время как мой скребок встречает надстройку, у которой нет некоторых параметров.Обычно это Powierzchnia (размер), Liczba pokoi (количество комнат), Pietro (этаж), Rok budowy (год постройки - я не соскребаю)
Я думаю, что это из-за этого:
pietro = ogl.find_all('p', class_ ="list__item__details__icons__element__desc")[2].text
если нет [2], который обычно является третьим параметром, выдается ошибка, что этот [2] находится вне диапазона.
Я пытался вставить if в цикл for, который проверял бы, есть ли такой параметр, и если нет, продолжал.Однако не смог пройти через это.
Я также пытался использовать его так:
Powierzchnia = zrzut.find_all('li', class_ = "list__item__details__icons__element details--icons--element--powierzchnia")[0].text
Этот не выдавал ошибку, но дал одинаковый размер для всех объявлений
Вотполный код:
from bs4 import BeautifulSoup
from requests import get
import pandas as pd
import itertools
import matplotlib.pyplot as plt
headers = ({'User-Agent':
'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'})
link = 'https://ogloszenia.trojmiasto.pl/nieruchomosci/wi,100,dw,1d.html?' + str(strona)
r = get(link, headers = headers)
zupa = BeautifulSoup(r.text, 'html.parser')
ogloszenia= zupa.find_all('div', class_="list__item")
n_stron = 0
numer = 0
for strona in range(0,12):
n_stron +=1
for ogl in ogloszenia:
tytul = ogl.find_all('h2', class_ ="list__item__content__title")[0].text
powierzchnia = ogl.find_all('p', class_ ="list__item__details__icons__element__desc")[0].text
liczba_pokoi = ogl.find_all('p', class_ ="list__item__details__icons__element__desc")[1].text
pietro = ogl.find_all('p', class_ ="list__item__details__icons__element__desc")[2].text
lokalizacja = ogl.find_all('p', class_ = "list__item__content__subtitle")[0].text
cena = ogl.find_all('p', class_ = "list__item__price__value")[0].text
cena_m = ogl.find_all('p', class_ = "list__item__details__info details--info--price")[0].text
numer += 1
print(numer)
print(tytul)
print('Powierzchnia: ' + powierzchnia )
print('Lokalizacja: ' + lokalizacja )
print('Liczba pokoi: ' + liczba_pokoi )
print('Pietro: ' + pietro )
print('Cena: ' + cena )
print('Cena za metr kwadratowy: ' + cena_m +'\n')