Форум сайта python.su
я взял за основу данный скрипт http://snippets.dzone.com/posts/show/1940 (качает рандомный мусор) и немного переделал его(качает что нужно)
# -*- coding: utf-8 -*-
import os
import re
import urllib.request
import urllib.parse
class googleImages(object):
def __init__(self):
self.RE_IMAGEURL = re.compile('imgurl=(http://.+?)&', re.DOTALL | re.IGNORECASE)
self.imagesURLs = []
def getImages(self, imageName=None, count=1):
"imageName - чего искать, count - сколько страниц"
imageName = urllib.parse.urlencode(dict(q=imageName))
htmlPage = ''
request = ''
count = range(0,count*20,20) # нумерация страниц для гугля
for i in count:
requestURL = 'http://images.google.ru/images?%s&hl=ru&start=%d' % (imageName,i)
requestHeaders = {'User-Agent':'Mozilla/5.0'}
request = urllib.request.Request(requestURL, None, requestHeaders)
htmlPage = urllib.request.urlopen(request).read(500000)
htmlPage=str(htmlPage)
results = self.RE_IMAGEURL.findall(htmlPage)
if len(results) > 0:
for image in results:
imageURL = urllib.parse.unquote_plus(image)
if not imageURL.startswith('http://'): imageURL = 'http://'+imageURL
self.imagesURLs += results
def imageloader(self,path,urls=None):
"path - путь куда сохранять картинки"
urllist = self.imagesURLs if urls == None else urls
filelist = []
x=0
for i in urllist:
#цикл создаёт уникальные имена файлов
filename = i.split('/')[-1]
if filename in filelist:
filelist.append(filename+"copy " + str(x))
else:
filelist.append(filename)
x+=1
print (len(filelist),"картиног")
#создаём директорию для картинок
try:
os.mkdir(path)
except WindowsError:
print("directory",path,"already exists")
c = 1
#сохраняем картинки
for i in zip(urllist,filelist):
try:
urllib.request.urlretrieve(i[0], path+'\\'+ i[1])
if c%5==0: print (c)
except:
print ("download №",c,i[0],"failed")
c += 1
if __name__ == '__main__':
img = googleImages()
img.getImages("орнамент",1)
img.imageloader("D:\image\орнамент")
print ("загрузка завершена")
Офлайн
размер задается в параметре imgsz get запроса. Добавь в запрос этот параметр. Возможные значения выяснить легко. Сделай расширенный поиск через браузер, и разбирай url страницы с результатами
Офлайн
Поправил:
def getImages(self, imageName=None, count=1,imsize=""):
"imageName - чего искать, count - сколько страниц, imsize - small, big или huge"
imsizes = dict(small="icon",big="xxlarge",huge="huge")
imageName = urllib.parse.urlencode(dict(q=imageName))
htmlPage = ''
request = ''
count = range(0,count*20,20) # нумерация страниц для гугля
for i in count:
requestURL = 'http://images.google.ru/images?%s&hl=ru&start=%d&imgsz=%s' % (imageName,i,imsizes.get(imsize,''))
Офлайн
хм… ты изучаешь питон на основе этого скрипта?!
смотри модуль threading
Офлайн
igor.kaist
смотри модуль threading
def imageloader(self,path,urls=None):
"path - путь куда сохранять картинки"
urllist = self.imagesURLs if urls == None else urls
filelist = []
x=0
for i in urllist:
#цикл создаёт уникальные имена файлов
filename = i.split('/')[-1]
if filename in filelist:
filelist.append(path+'\\'+ filename+"copy " + str(x))
else:
filelist.append(path+'\\'+ filename)
x+=1
print (len(filelist),"картиног")
#создаём директорию для картинок
try:
os.mkdir(path)
except WindowsError:
print("directory",path,"already exists")
q = queue.Queue()
for i in zip(urllist,filelist):
q.put(i) # не знаю как передать q в потоки %)
#сохраняем картинки в 5 потоков
for i in range(4):
t().start()
class t(threading.Thread):
def run(self):
while (q.not_empty()):
i = q.get()
try:
print ("triyng to donwload ", i[0],end = '')
urllib.request.urlretrieve(i[0],i[1])
print ("...ok")
except:
print ("...failed")
Офлайн