Уведомления

Группа в Telegram: @pythonsu

#1 Май 16, 2014 07:00:21

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Скачать картинки

Может

try: except: 

Офлайн

#2 Май 16, 2014 08:16:08

rizan
Зарегистрирован: 2014-05-15
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Скачать картинки

sanodin
try: except:
я думал над этим. Но пока не понял, как их правиьно применить. А точнее, что в них вписать

Офлайн

#3 Май 16, 2014 08:28:43

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Скачать картинки

Можно так

for elem in grab.doc.select('//img'):        
        
            #топаем по ссылке в теге img
            try:
                grab.go(elem.attr('src'))
            except: pass

Офлайн

#4 Май 16, 2014 16:42:33

rizan
Зарегистрирован: 2014-05-15
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Скачать картинки

Вот что у меня вышло, правда не реализовал, проверку размера картинки. Не осилил опять
Практического примнения ни какого конечно, но мжет кому-то пригодиться
Может что-то можно исправить и сделать лучше?

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

#!/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()

Отредактировано rizan (Май 16, 2014 16:45:24)

Офлайн

#5 Май 17, 2014 07:12:54

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Скачать картинки

rizan
проверку размера картинки
http://habrahabr.ru/post/199440/

Офлайн

#6 Май 17, 2014 12:54:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Скачать картинки

rizan
не реализовал, проверку размера картинки
через PIL легко делается



Офлайн

#7 Май 18, 2014 00:27:08

rizan
Зарегистрирован: 2014-05-15
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Скачать картинки

Вот, как то так

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()     

Офлайн

#8 Май 18, 2014 00:56:04

rizan
Зарегистрирован: 2014-05-15
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Скачать картинки

Полный код

#!/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()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version