2016-01-15 3 views
-7
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 он дает ошибку.Почему мой код возвращает IndexError: индекс индекса за пределами диапазона?

+2

Перед тем, как задать вопрос, вам нужно немного отладить. Попробуйте распечатать то, что вы вернетесь из 'imgUrl.split ('imgurl =')', если это строка, которая терпит неудачу. Если строка сбоя является второй строкой, распечатайте результат 'sp1.split ('& amp')'. –

ответ

0

следующие вопросы в вашем коде необходимо внимание:

1) Нет все imgUrl содержит 'imgurl ='

2) Нет все imgUrl содержит '& усилитель'

3) imgUrl может быть недействительный (например, "JavaScript: недействительным (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 
Смежные вопросы