尝试“一切”后如何修复IndexError

时间:2019-06-24 23:12:06

标签: python

我的Python网络抓取工具收集了大量数据,然后突然出现IndexError停止。我尝试了不同的页面和设置,但它们停在随机位置。

(部分)我的代码如下

numListings = int(re.findall(r'\d+', numListingsRaw)[0])
numPages = math.ceil(numListings / 100)

print(numPages) 


for numb in range(1, numPages):
    pageSoup = make_soup("https://url" + str(numb) + "&pmax=5000&srt=df-a")
    containers = pageSoup.findAll("li", {"class":"occasion popup_click_event 
    aec_popup_click"})

for container in containers:

    ID = container.a["data-id"]
    titel = container["data-vrnt"].replace(",", "|")
    URL = container.a["href"]
    merk = container["data-mrk"]
    soort = container["data-mdl"]
    prijs = container.find("div", {"class":"occ_price"}).text.strip()

    ## Bouwjaar en km
    bouwjaarKM = container.span.text.strip().split(", ")
    bouwjaarRaw = bouwjaarKM[0].split(": ")
    bouwjaar = bouwjaarRaw[1]

    km_int = int(''.join(filter(str.isdigit, bouwjaarKM[1])))
    km = str(km_int)

    rest = container.find("div", {"class":"occ_extrainfo"}).text.strip()
    rest_split = rest.split(", ")
    brandstof = rest_split[0]
    inhoud = rest_split[1]
    vermogen = rest_split[2]
    transmissie = rest_split[3]
    carroserie = rest_split[4]
    kleur = rest_split[5]

这是确切的错误消息:

"Traceback (most recent call last):
File "Webscraper_multi2.py", line 62, in <module>
inhoud = rest_split[1]
IndexError: list index out of range"

我知道它与for循环有关,但是我无法理解。

非常感谢您的帮助。 预先感谢,

汤姆

3 个答案:

答案 0 :(得分:0)

打印rest_split的值。您将发现它是一个长度小于2的列表,这是列表具有索引1所需要的。

答案 1 :(得分:0)

在尝试访问需要长度的给定索引之前检查长度:

rest = container.find("div", {"class":"occ_extrainfo"}).text.strip()
rest_split = rest.split(", ")
if len(rest_split) >= 6:
    brandstof = rest_split[0]
    inhoud = rest_split[1]
    vermogen = rest_split[2]
    transmissie = rest_split[3]
    carroserie = rest_split[4]
    kleur = rest_split[5]

如果您知道拆分列表恰好是您想要的长度(if len(rest_split) == 6:),则可以将列表拆成一行:

brandstof, inhoud, vermogen, transmissie, carroserie, kleur = rest_split

答案 2 :(得分:0)

感谢大家的快速回复!在您的帮助下,我成功了。

在某些情况下: 我试图刮擦二手汽车网站。根据我得到的提示,我更改了每个项目的输出以打印rest_split列表。

我要抓取的列表长7个元素。但是在网站上,由于某种原因,在搜索结果中添加了电单车。这个只有1个元素,因此会出错。

针对可能存在类似问题的人们的解决方案:

rest = container.find("div", {"class":"occ_extrainfo"}).text.strip()
rest_split = rest.split(", ")
if len(rest_split) == 7:
    brandstof = rest_split[0]
    inhoud = rest_split[1]
    vermogen = rest_split[2]
    transmissie = rest_split[3]
    carroserie = rest_split[4]
    kleur = rest_split[5]

特别感谢JacobIRR,他实际上使生活变得如此轻松,我什至不必考虑它。