使用Python从encrypted-tbn0.gstatic.com下载图片

3
我正在从Google上进行图片爬取。我在我的脚本中得到了图片链接,但是它的格式如下:

https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQh6rPd9hx_fUGzorshx1fG5kzUM5FGCSYmm2YBuLU3uSFFI5BviIWd6hrHbw&s

我打开了图片,但是我无法使用urllib.urlretrieve(imagenurl,imagen)进行下载。

有人知道其他下载方法吗? 我正在使用Python 2.7。

import requests
from  bs4 import BeautifulSoup
import urllib

def run():
    palabra ='pez'
    response = requests.get('https://www.google.com/search?q={}&hl=es&sxsrf=ALeKk00KoMQKffGLNWV5UEKbuPwpySPuig:1596391733831&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiajd7Rjv3qAhXqTN8KHSINBkcQ_AUoAXoECBoQAw&biw=1262&bih=593'.format(palabra))
    soup = BeautifulSoup(response.content,'html.parser')
    imagenes = soup.find_all('img')

    for i in range(1,5):
        imagen_i = imagenes[i]['src']
        imagen = imagen_i.split('/')[-1]
        print(imagen_i)
        #urllib.urlretrieve(imagen_i)


if __name__ == '__main__':
    run()


2
我正在使用Python 2.7。停下来。现在就升级到Python 3。 - kthy
为什么你不能使用urlretrieve?是因为出现了错误吗?请将错误信息放在问题中。 - furas
我在Linux上使用urlretrieve下载它没有问题,但你应该检查print(imagen)来查看你使用的文件名。它给出的文件名类似于images?q=tbn:ANd9GcQh6rPd9hx_fUGzorshx1fG5kzUM5FGCSYmm2YBuLU3uSFFI5BviIWd6hrHbw&s,其中可能包含系统不允许的字符,因此可能无法保存。你应该手动创建文件名,例如1.jpg2.jpg,... "{}.jpg".format(i) - furas
2个回答

0

我在Linux上使用urlretrieve下载它没有问题,但你应该检查print(imagen)来查看你使用的文件名。

它会给出类似以下的文件名:

images?q=tbn:ANd9GcQh6rPd9hx_fUGzorshx1fG5kzUM5FGCSYmm2YBuLU3uSFFI5BviIWd6hrHbw&s 

带有在您的系统中可能不允许的字符 - 所以它可能无法保存 - 您应该手动创建文件名 - 例如 1.jpg, 2.jpg, ..., "{}.jpg".format(i) - 或者您应该从文件名中删除不允许的字符。


import requests
from  bs4 import BeautifulSoup
import urllib

palabra ='pez'

response = requests.get('https://www.google.com/search?q={}&hl=es&sxsrf=ALeKk00KoMQKffGLNWV5UEKbuPwpySPuig:1596391733831&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiajd7Rjv3qAhXqTN8KHSINBkcQ_AUoAXoECBoQAw&biw=1262&bih=593'.format(palabra))
soup = BeautifulSoup(response.content,'html.parser')
all_images = soup.find_all('img')

for i, img in enumerate(all_images[1:5], 1):
    src = img['src']
    print 'src:', src
    
    filename = src.split('/')[-1]
    print 'filename:', filename

    #import urlparse
    #parts = urlparse.urlparse(src)
    #query = urlparse.parse_qs(parts.query)
    #q = query['q'][0]
    #filename = q.split(':')[1]
    #print 'filename:', filename
            
    filename = '{}.jpg'.format(i)
    print 'filename:', filename
    
    urllib.urlretrieve(src, filename)

0
IMG_FOLDER="/some/folder/directory/IMAGES/"

for i in image_url_list:
    response = requests.get(i[0], headers=headers, stream=True, timeout=1)
    if response.status_code == 200:
        file_loc=IMG_FOLDER+i[1]+".png"
        with open(file_loc, 'wb') as f:
            for chunk in response:
                f.write(chunk)

其中image_url_list由子列表组成,第一个项目[0]是您所说的URL类型,而[1]是我分配给UUID4的一些随机名称。

我认为这种方法应该比上面显示的方法快得多。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接