python - python IndexError:列表索引超出范围-beautifulsoup
问题描述
我写了一些返回两个输出的代码出现错误,我的代码的主要问题是什么??????
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import os
import sys
import unicodecsv as csv
import codecs
from urllib.request import urlopen
for i in range(22):
my_url = "https://www.bamilo.com/electronic_accessories/?source=gfm/?facet_is_mpg_child=0&viewType=gridView&page="
uClient = uReq(my_url + str(i))
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
containers = page_soup.findAll("div" , {"class" : "sku -gallery" })
filename = "product.csv"
f = codecs.open(filename, "a" , "utf-8-sig")
headers = "price_two\n"
f.write(headers)
for container in containers:
price_old = container.findAll("span",{"class" : "price -old "} )
price_two = price_old[0].text.strip()
print("price_two " + price_two)
f.write(price_two.replace(",", "") + "\n")
f.close()
错误:::
> price_two 1,800,000ریال
price_two 2,800,000ریال
Traceback (most recent call last):
File "F:\bam.py", line 34, in <module>
price_two = price_old[0].text.strip()
IndexError: list index out of range
解决方案
您的容器有时可能不会为'price -old'
. 在这种情况下,price_old
是一个空列表,因此查找price_old[0]
失败。添加一个条件来检查这个:
for container in containers:
price_old = container.findAll("span",{"class" : "price -old "} )
if len(price_old) > 0:
price_two = price_old[0].text.strip()
print("price_two " + price_two)
f.write(price_two.replace(",", "") + "\n")
推荐阅读
- java - 如何在 firebase 中实时检索此元素?
- rust - Rust - 没有为 `OsString` 实现特征`StdError`
- r - 在绘图仪表图中添加悬停文本或文本注释
- angular - 如何更新Angular 9中动态添加的子组件中的值
- html - bxslider 背景图像与滑块内容 z-index 不重叠
- html - MathJax:如何使数学可复制?
- azure - 弹性数据库池的 ARM 模板失败
- python - 如何按顺序获取数字的起点并处理错误?
- go - 如何修复但不包含包 golang.org/x/sys?
- anaconda - Conda 在频道中安装所有软件包