【问题标题】:Why is my code returning IndexError: list index out of range?为什么我的代码返回 IndexError: list index out of range?
【发布时间】:2016-04-21 09:47:16
【问题描述】:
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)

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

【问题讨论】:

  • 在提问之前你需要做一点调试。尝试打印出您从imgUrl.split('imgurl=') 返回的内容,如果这是失败的那一行。如果失败的行是第二行,则打印出sp1.split('&amp')的结果。

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


【解决方案1】:

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

1) 不是所有的 imgUrl 都包含 'imgurl='

2) 不是所有的 imgUrl 都包含 '&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

【讨论】:

    猜你喜欢
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2019-04-15
    • 2020-10-16
    相关资源
    最近更新 更多