首页 > 解决方案 > 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

标签: python

解决方案


您的容器有时可能不会为'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")

推荐阅读