首页 > 解决方案 > 一周前工作的代码,现在我得到一个错误,而没有更改我的代码中的任何内容

问题描述

几周前我写了一个小型网络爬虫,它运行良好,但现在我没有更改代码的任何部分就给了我一个错误。下面列出了我的代码以供参考:

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")

我正在使用 selenium(我省略了导入和设置,因为这部分代码工作正常),当我运行我的代码时,我收到以下错误:

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,这表明 details 变量中有值。由于定义了范围,并且我得到了列表长度的结果,为什么会出现超出范围的错误?

标签: pythonpython-3.x

解决方案


您的代码假定每个数组的长度是相同的,但这不能保证。就像其他人所说的那样,如果网站的设计发生了变化,请重新考虑您的实施。

或者,如果您想停止抛出错误,您可以查看内置的 zip 库。https://docs.python.org/3.3/library/functions.html#zip

这会将您的数组组合成一个元组数组,创建 n 个元组,其中 n 是最小数组的长度。考虑一下,如果网站改变了它的设计,新创建的 zip 的意义可能无效。


推荐阅读