从网页下载图像

时间:2015-06-11 20:46:43

标签: python web download scripting

我试图从网页下载图片,请问我在这里缺少什么?

    import urllib
    from urllib.request import urlopen, Request 
    import requests
    from bs4 import BeautifulSoup
    import os

urlpage ='https://www.google.com/search?site=imghp&tbm=isch&source=hp&biw=1414&bih=709&q=little+cofee'
header = {'User-Agent': 'Mozilla/5.0'}  
page = urlopen(Request(urlpage,headers=header))
soup = BeautifulSoup(page)

images = soup.find_all("div", {"class":"thumb-pic"})
for image in images:
     imgUrl = image.a['href'].split("imgurl=")[1]
     urllib.request.urlretrieve(imgUrl, os.path.basename(imgUrl))

1 个答案:

答案 0 :(得分:1)

这很棘手。有时候他们会使用简短的网址,例如" images / img.jpg"," / images / img.jpg"," ../ images / img.jpg"。但是你正在尝试的谷歌页面根本没有HTML标签。它只包含javascript。

我做了一个快速而肮脏的例子,只是为了向您展示它在Python 2.7中的工作方式,但您可以保存在浏览器中打开的页面,所有图像都会整齐地保存在文件夹中。

#!/usr/bin/python

import urllib

url ='http://www.blogto.com/cafes/little-nickys-coffee-toronto'
ext=['.jpg', '.png', '.gif'] # image type to download

response= urllib.urlopen(url)
html = response.read()

IMGs=[]
L=html.split('src="')
for item in L:
    item=item[:item.find('"')]
    item=item.strip()
    if item.find('http') == -1:
        item=url[:url.find('/', 10)]+item
    for e in ext:
        if item.find(e) != -1:
            if item not in IMGs:
                IMGs.append(item)


n=len(IMGs)
print 'Found', n, 'images'
i=1
for img in IMGs:
    ext=img[img.rfind('.'):]
    filename='0'*(len(str(n))-len(str(i)))+str(i)
    i += 1
    try:
        print img
        f = open(filename+ext,'wb')
        f.write(urllib.urlopen(img).read())
        f.close()
    except:
        print "Unpredictable error:", img

print 'Done!'