使用BeautifulSoup指数超出范围

时间:2018-05-15 17:59:34

标签: python beautifulsoup indexoutofrangeexception

我试图理解这个令人讨厌的索引超出范围错误一段时间但我无法弄清楚它出现的原因。

输出是我期望的正确数量的结果。 我无法抓住空洞的那个,我猜它会引起错误。

在下面的代码中,我试图捕获错误,但我必须做错事。 我也尝试了len()方法。 我也在计算迭代次数。

#Import lib needed
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

#-----------------------------------------Importing data -----------------------------------------------------------------#
#Page with number of adds per location

my_url_nb_Nimes_building = 'https://www.leboncoin.fr/ventes_immobilieres/offres/?th=1&q=immeuble&it=1&location=N%EEmes&ret=1&ret=2&ret=5'
#Opening connection, grabbing the page, close connection
uClientnimesbuild = uReq(my_url_nb_Nimes_building)
page_htmlnimesbuild =  uClientnimesbuild.read()
uClientnimesbuild.close()

page_soupnimesbuild = soup(page_htmlnimesbuild, "html.parser")


containglobalnbnimesbuild = ((page_soupnimesbuild).find_all("section",{"class":"item_infos"}))


count = 0
for contain in containglobalnbnimesbuild:
    try:
        titlecontain = contain.find_all("h2",{"class":"item_title"})
        title = titlecontain[0]
        print("Titre:", title)
        count = count +1
        print(count)
    except ValueError:
        print("inerror")

你能不知道我做错了什么才能抓住这个。

    title = titlecontain[0]
IndexError: list index out of range

非常感谢

2 个答案:

答案 0 :(得分:0)

由于您的except语句专门捕获ValueError,并且对titlecontain的无效访问权限为IndexError,因此错误未被捕获。您可以将代码更改为except IndexError,而不仅仅是except,这样可以发现错误。

您可能只想使用if语句。像

这样的东西
if len(titlecontain) == 0:
    continue 

希望这有帮助!

答案 1 :(得分:0)

我让它像这样工作:

import requests
from bs4 import BeautifulSoup

website_url = 'https://www.leboncoin.fr/ventes_immobilieres/offres/?th=1&q=immeuble&it=1&location=N%EEmes&ret=1&ret=2&ret=5'
page = requests.get(website_url).text
soup = BeautifulSoup(page,'lxml')

section = soup.find("section",{"class":"tabsContent block-white dontSwitch"})

for t in section.find_all("h2",{"class":"item_title"}):
    try:
        print(t.text.strip())
    except ValueError:
        print("inerror")