为什么我的代码返回IndexError:list index超出范围?

时间:2016-01-15 18:09:27

标签: python python-2.7 python-3.x

from bs4 import BeautifulSoup
import urllib2
import urllib
import os
url=urllib.urlopen("https://www.google.co.in/search?q=cow&biw=1242&bih=606&source=lnms&tbm=isch&sa=X&ved=0ahUKEwi21oLAqqzKAhXNjo4KHVs0DkgQ_AUIBigB")
soup=BeautifulSoup(url)
li=soup.find_all('a')
for links in li:
    imgUrl=links.get('href')
    sp1=imgUrl.split('imgurl=')[1]
    sp2=sp1.split('&amp')[0]
    urllib.urlretrieve(sp2)

我正在尝试从此网页下载所有图片。我正在下载的链接是Google图片网页的源代码。对于一个图像单独执行代码但是使用find_all下载多个图像时,它会正常工作,但会出错。

1 个答案:

答案 0 :(得分:0)

您的代码中的以下问题需要注意:

1)并非所有imgUrl都包含' imgurl ='

2)并非所有imgUrl都包含& amp; amp;& amp;

3)imgUrl可能无效(例如," javascript:void(0)")

考虑到上述因素,我对您的代码进行了一些更改:

from bs4 import BeautifulSoup
import urllib2
import urllib
import os
url=urllib.urlopen("https://www.google.co.in/search?q=cow&biw=1242&bih=606&source=lnms&tbm=isch&sa=X&ved=0ahUKEwi21oLAqqzKAhXNjo4KHVs0DkgQ_AUIBigB")
soup=BeautifulSoup(url)
li=soup.findAll('a', href=True)
for links in li:
    imgUrl=links.get('href')
    if 'imgurl=' in imgUrl:
        imgUrl=imgUrl.split('imgurl=')[1]
    if '&amp' in imgUrl:
        imgUrl=imgUrl.split('&amp')[0]
    try:
        urllib.urlretrieve(imgUrl)
    except:
        continue # invalid imgUrl