如何在 BeautifulSoup (Python) 中避免 "list index out of range"
How to avoid "list index out of range" in BeautifulSoup (Python)
执行此代码时,我总是收到错误消息:"IndexError: list index out of range"。我该怎么做才能避免这种情况?
import urllib
thisurl = "http://www.tutti.ch/stgallen/fahrzeuge/autos"
handle = urllib.urlopen(thisurl)
html_gunk = handle.read()
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_gunk, 'html.parser')
for first in soup.find_all("li", class_="li-in"):
#print first.select("em.fl.in-date")
if (first.select("em.fl.in-date")[0].text is not None):
time = first.select("em.fl.in-date")[0].text
if (len(time) > 0):
if first.select("em.fl.in-date")[0].text[6] == "H":
zeit = first.select("em.fl.in-date")[0].text[11:16]
print zeit
if first.select("em.fl.in-date")[0].text[6] == "G":
zeit = first.select("em.fl.in-date")[0].text[13:18]
print zeit
您缺少检查列表是否为空的检查。试试这个
import urllib
thisurl = "http://www.tutti.ch/stgallen/fahrzeuge/autos"
handle = urllib.urlopen(thisurl)
html_gunk = handle.read()
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_gunk, 'html.parser')
for first in soup.find_all("li", class_="li-in"):
#print first.select("em.fl.in-date")
if first.select("em.fl.in-date") is not None and len(first.select("em.fl.in-date")) > 0:
if (first.select("em.fl.in-date")[0].text is not None):
time = first.select("em.fl.in-date")[0].text
if (len(time) > 0):
if first.select("em.fl.in-date")[0].text[6] == "H":
zeit = first.select("em.fl.in-date")[0].text[11:16]
print zeit
if first.select("em.fl.in-date")[0].text[6] == "G":
zeit = first.select("em.fl.in-date")[0].text[13:18]
print zeit
执行此代码时,我总是收到错误消息:"IndexError: list index out of range"。我该怎么做才能避免这种情况?
import urllib
thisurl = "http://www.tutti.ch/stgallen/fahrzeuge/autos"
handle = urllib.urlopen(thisurl)
html_gunk = handle.read()
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_gunk, 'html.parser')
for first in soup.find_all("li", class_="li-in"):
#print first.select("em.fl.in-date")
if (first.select("em.fl.in-date")[0].text is not None):
time = first.select("em.fl.in-date")[0].text
if (len(time) > 0):
if first.select("em.fl.in-date")[0].text[6] == "H":
zeit = first.select("em.fl.in-date")[0].text[11:16]
print zeit
if first.select("em.fl.in-date")[0].text[6] == "G":
zeit = first.select("em.fl.in-date")[0].text[13:18]
print zeit
您缺少检查列表是否为空的检查。试试这个
import urllib
thisurl = "http://www.tutti.ch/stgallen/fahrzeuge/autos"
handle = urllib.urlopen(thisurl)
html_gunk = handle.read()
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_gunk, 'html.parser')
for first in soup.find_all("li", class_="li-in"):
#print first.select("em.fl.in-date")
if first.select("em.fl.in-date") is not None and len(first.select("em.fl.in-date")) > 0:
if (first.select("em.fl.in-date")[0].text is not None):
time = first.select("em.fl.in-date")[0].text
if (len(time) > 0):
if first.select("em.fl.in-date")[0].text[6] == "H":
zeit = first.select("em.fl.in-date")[0].text[11:16]
print zeit
if first.select("em.fl.in-date")[0].text[6] == "G":
zeit = first.select("em.fl.in-date")[0].text[13:18]
print zeit