python - 一周前工作的代码,现在我得到一个错误,而没有更改我的代码中的任何内容
问题描述
几周前我写了一个小型网络爬虫,它运行良好,但现在我没有更改代码的任何部分就给了我一个错误。下面列出了我的代码以供参考:
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 变量中有值。由于定义了范围,并且我得到了列表长度的结果,为什么会出现超出范围的错误?
解决方案
您的代码假定每个数组的长度是相同的,但这不能保证。就像其他人所说的那样,如果网站的设计发生了变化,请重新考虑您的实施。
或者,如果您想停止抛出错误,您可以查看内置的 zip 库。https://docs.python.org/3.3/library/functions.html#zip
这会将您的数组组合成一个元组数组,创建 n 个元组,其中 n 是最小数组的长度。考虑一下,如果网站改变了它的设计,新创建的 zip 的意义可能无效。
推荐阅读
- html - 如何垂直对齐下拉按钮与导航按钮
- powerbi - 基于分组和最大值的多列排序
- mysql - 提高查询速度建议
- php - 将 Slim HTTP 请求转发到 Guzzle 客户端
- syntax - 如何在 Sulley fuzzer 上修复模糊网络层的语法
- docker - 启动容器时出现随机 docker 错误
- javascript - 图表不反映活动条目,除非我在标记中将其设置为 array.slice() - 这将禁用选择点 - Stackblitz inside
- c# - Angular 客户端不反映 Azure Service Fabric 下的更改
- python - 使用 Python 显示 XML 数据
- javascript - 使用jsdoc注解,调用时如何指定泛型函数的输出类型