Найти - Пользователи
Полная версия: скрипт для закачки картинок с гугля
Начало » Python для новичков » скрипт для закачки картинок с гугля
1
Leron
я взял за основу данный скрипт 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 ("загрузка завершена")
Пожалуста добавте, кто может, возможность выбирать размер картинок для закачки(в гугле можно выбирать размер при поиске). А вообще любые улучшения приветствуются :)
igor.kaist
размер задается в параметре imgsz get запроса. Добавь в запрос этот параметр. Возможные значения выяснить легко. Сделай расширенный поиск через браузер, и разбирай url страницы с результатами
Leron
Поправил:
    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,''))
А как сделать закачку в несколько потоков(сразу несколько картинок)?
igor.kaist
хм… ты изучаешь питон на основе этого скрипта?!
смотри модуль threading
Leron
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")
а как q передать в потоки?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB