我写了一个小型的网页抓取工具,几周前运行良好,但现在却出现了错误,而我没有更改代码的任何部分。我的代码在下面列出以供参考:
address = driver.find_elements_by_xpath('//h3[@class = "street"]')
price = driver.find_elements_by_xpath('//div[@class = "price"]')
details = driver.find_elements_by_xpath('//div[@class = "details"]')
num_page_items = len(details)
with open('results.csv', 'a') as f:
for x in range(num_page_items):
f.write(address[x].text + " , " + price[x].text.replace(",", "") + "," + details[x].text + "\n")
我正在使用硒(由于代码的那部分工作正常,我省略了导入和设置),并且在运行代码时出现以下错误:
line 25, in <module>
f.write(address[x].text + " , " + price[x].text.replace(",", "") + "," + details[x].text + "\n")
IndexError: list index out of range
我做了一些研究,但是当我打印len(details)
时我得到了24,这表明detail变量中有值。既然定义了范围,并且得到列表长度的结果,为什么会出现超出范围的错误?
答案 0 :(得分:1)
您的代码假定每个数组的长度都相同,但这并不能保证。就像其他人所说的,如果网站的设计已更改,请重新考虑您的实现。
或者,如果您想停止引发错误,则可以查看内置的zip库。 https://docs.python.org/3.3/library/functions.html#zip
这会将您的数组组合成一个元组数组,创建n个元组,其中n是最小数组的长度。但是请考虑一下,如果网站更改了设计,则新创建的zip的意义可能无效。