我的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循环有关,但是我无法理解。
非常感谢您的帮助。 预先感谢,
汤姆
答案 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,他实际上使生活变得如此轻松,我什至不必考虑它。