我正在抓捕我的本地网站进行公寓购买/出租广告。
在某些情况下,我收到IndexError:列表索引超出范围错误。
我的刮板遇到一个没有某些参数的添加项时收到错误。通常是Powierzchnia(大小),Liczba pokoi(房间数),Pietro(地板),Rok budowy(建成年份-我不打算刮scrap)
我认为是因为:
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')
答案 0 :(得分:2)
您可以捕获IndexError
异常并将变量设置为None
或''
try:
powierzchnia = ogl.find_all('p', class_ ="list__item__details__icons__element__desc")[0].text
except IndexError:
powierzchnia = ''
您可能还会遇到其他变量。只需对每个重复相同的操作。
答案 1 :(得分:0)
我建议进行两项更改。
首先,尝试隔离函数中的重复命令。
def findDetail(ogl, tag, class, index):
return ogl.find_all(tag, class_ = class)[index].text
然后,在没有索引的情况下,可以使用“ try-except”进行处理。这是处理Python错误的标准方法:
def findDetail(ogl, tag, class, index):
try:
return ogl.find_all(tag, class_ = class)[index].text
except IndexError:
print(f”Could not find index {index} for {tag} with {class}”)
return “”
然后通过以下方式调用它:
for ogl in ogloszenia:
tytul = findDetail(ogl, “h2”, “"list__item__content__title", 0)
powierzchnia = findDetail(ogl, ‘p’, "list__item__details__icons__element__desc", 0)
以此类推。如果找不到索引,则只会打印一个空白字符串。
答案 2 :(得分:0)
尝试:
settings.STATIC_ROOT