Найти - Пользователи
Полная версия: Скачать картинки
Начало » Python для новичков » Скачать картинки
1 2 3 4
sanodin
Может
try: except: 
rizan
sanodin
try: except:
я думал над этим. Но пока не понял, как их правиьно применить. А точнее, что в них вписать
sanodin
Можно так
for elem in grab.doc.select('//img'):        
        
            #топаем по ссылке в теге img
            try:
                grab.go(elem.attr('src'))
            except: pass
rizan
Вот что у меня вышло, правда не реализовал, проверку размера картинки. Не осилил опять
Практического примнения ни какого конечно, но мжет кому-то пригодиться
Может что-то можно исправить и сделать лучше?

Да, некоторые картинки все равно не читаемые

#!/usr/bin/env python
#coding=utf-8
import re
import sys
from mimetypes import MimeTypes
from grab import Grab
'''
Имеется html-документ — результат поиска в Google.  
Необходимо выделить из него ссылки на первые 5 ресурсов и загрузить все изображения,
размером более чем 64x64 пикселя, расположенные по этим ссылкам
'''
grab = Grab()
#grab.setup(proxy='192.168.0.81:8080', proxy_type='http')
#путь к файлу
file_for_read = '2.html'
#откроем файл для чтения
f = open(file_for_read, 'r')
#прочтем файл
text = f.read()
f.close()
#Шаблон поиска №1:
p = re.compile('<a\shref=\"(http://[0-9a-z.\-\/\?\&\=\_\%]*)',re.IGNORECASE)
#Найдем все вхождения:
m = p.findall(text)
mime = MimeTypes()
i = 0
while i != 5:
    #идем по i -ссылке
    grab.go(m[i])
    j = 1
    #Перебираем в полученном по ссылке документу теги img
    for elem in grab.doc.select('//img'):        
        try:
            #топаем по ссылке в теге img
            grab.go(elem.attr('src'))
            #определяем тип картинки
            type = mime.guess_type(elem.attr('src'))
         
            #придумываем расширение
            if type[0] == 'image/jpeg': 
                ext = 'jpeg'
            elif type[0] == 'image/png':
                ext = 'png'
            elif type[0] == 'image/gif':
                ext = 'gif'
            else :
                ext = 'none'
        
            #если расширение придумалось, то записываем по ссылке из src файл картинки
            if ext != 'none':
                with open('result/'+str(i)+str(j)+'.'+ext, 'wb') as f:
                    f.write(grab.response.body)
                    f.close()
        except: pass
        j += 1
    i += 1    
sys.exit()
sanodin
rizan
проверку размера картинки
http://habrahabr.ru/post/199440/
py.user.next
rizan
не реализовал, проверку размера картинки
через PIL легко делается
rizan
Вот, как то так
grab.go(elem.attr('src'))            
            img = Image.open(StringIO.StringIO(grab.response.body))
            imgSize = img.size
            text = str(grab.response.headers)
            shablon = 'Content-Type:\simage\/(png|jpeg|gif)'
            pt = re.compile(shablon)           
            mp = pt.findall(text)
            
            if mp[0]:
                if imgSize > (64,64):                       
                    with open('result/'+str(i)+str(j)+'.'+mp[0], 'wb') as f:
                        f.write(grab.response.body)            
                        f.close()     
rizan
Полный код
#!/usr/bin/python
#coding=utf-8
import re
import sys
from grab import Grab
from PIL import Image
import logging
import StringIO
'''
Имеется html-документ — результат поиска в Google.  
Необходимо выделить из него ссылки на первые 5 ресурсов и загрузить
все изображения, размером более чем 64x64 пикселя,
расположенные по этим ссылкам
Вычленение ссылок из исходного файла осуществляется
при помощи регулярных выражений
'''
##Функции
def read_file(file_for_read):
    ''' функция для чтения текста из файла в переменную'''   
    f = open(file_for_read, 'r')   
    text = f.read()
    f.close()
    return text
def get_match(a_pattern, text):
    '''функция поиска нужных вхождений в тексте по заданному шаблону
    text - исходный текст, a_pattern - шаблон поиска
    возвращает список совпадений'''
    p = re.compile(a_pattern,re.IGNORECASE)
    m = p.findall(text)
    return m
##Переменные 
file_for_read = '2.html' #путь к файлу "html-документ — результат поиска в Google"
a_pattern = '<a\shref=\"(http://[0-9a-z.\-\/\?\&\=\_\%]*)' #Шаблон поиска ссылок
e_pattern = 'Content-Type:\simage\/(png|jpeg|gif)' #шаблон для определения типа файла в header'e
##
grab = Grab()
#grab.setup(proxy='192.168.0.81:8080', proxy_type='http') 
text = read_file(file_for_read) #считаем исходный файл в переменную.
aList = get_match(a_pattern,text) #Найдем список необходимых ссылокпо заданному шаблону
i = 0
while i != 5:    #обходим первые пять ссылок 
    grab.go(aList[i]) #идем по i -ссылке
    j = 0    
    for elem in grab.doc.select('//img'):  #Перебираем в полученном по ссылке документе теги img      
        try:  
            j += 1          
            logging.basicConfig(level=logging.DEBUG)
            grab.go(elem.attr('src'))   #топаем по ссылке в теге img          
            img = Image.open(StringIO.StringIO(grab.response.body)) #Передаем объект
            imgSize = img.size #Получаем размер изображения
            text = str(grab.response.headers) #получаем текст заголовков            
            extList = get_match(e_pattern,text) #получаем тип (расширение) файла            
            
            if extList[0]: #Если расширение нужное есть
                if imgSize > (64,64): #И если размер картинки подходящий                      
                    with open('result/'+str(i)+str(j)+'.'+extList[0], 'wb') as f:
                        f.write(grab.response.body)            
                        f.close()     #то сохраняем картинку                 
        except: pass       
    i += 1    
print 'Ok. Done'
sys.exit()
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