Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 18, 2014 07:02:18

Notan1310
Зарегистрирован: 2014-09-14
Сообщения: 98
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг изображений

Доброго времени суток. Объясните пожалуйста где ошибаюсь.

# -*- coding: utf-8 -*-
from grab import Grab
import time, random
g = Grab()
g.setup(hammer_mode=True, hammer_timeouts=((2, 5), (10, 15), (20, 30)))
a = 4
i = 0 
while a < 650:
    g.go('http://www.anekdotov-mnogo.ru/smeshnie_kartinki.php?page='+str(a), log_file='outpage.html')
    time.sleep(2)
    print 'page-' + str(a)
    for elem in g.doc.select("html/body/table/tbody/tr/td/div/p/img")[0:15]:
        img = elem.attr('src')
        print img 
        g.go('http://www.anekdotov-mnogo.ru/' + str(img))
        rand = random.randint(0, 9999)
        f = open("/home/montana/biz/python/tools/fotostrana/parser/umor/18.12.2014/" + str(rand)+ '-' + str(i) +".jpg", "wb")
        #print '%s' % (elem.attr('src'))
        f.write(img)
        f.close()
        print 'foto-'+str(i) 
        i = i + 1
        time.sleep(2) 
    a = a+1

С сайта нужно взять все юморные картинки , но скрипт не находит нужные элементы. Ошибок не выдает. Просто работает по while но в for не переходит Пробовал и так
# -*- coding: utf-8 -*-
import requests  
from lxml import html  
import sys  
import urlparse
a = 4
while a < 650:
    print 'page-'+str(a)
    response = requests.get('http://www.anekdotov-mnogo.ru/smeshnie_kartinki.php?page='+str(a))  
    parsed_body = html.fromstring(response.text)
# Парсим ссылки с картинками
    images = parsed_body.xpath('html/body/table/tbody/tr/td/div/p/img@src')  
    if not images:  
        sys.exit("Found No Images")
# Конвертирование всех относительных ссылок в абсолютные
    images = [urlparse.urljoin(response.url, url) for url in images]  
    print 'Found %s images' % len(images)
# Скачиваем только первые 10
    for url in images[0:15]:  
        r = requests.get(url)
        f = open('/home/montana/biz/python/tools/fotostrana/parser/umor/18.12.2014/%s' % url.split('/')[-1], 'w')
        f.write(r.content)
        f.close()
    a = a + 1 

Отредактировано Notan1310 (Дек. 18, 2014 07:04:53)

Офлайн

#2 Дек. 18, 2014 15:18:22

Alex_HH
Зарегистрирован: 2014-03-03
Сообщения: 91
Репутация: +  13  -
Профиль   Отправить e-mail  

Парсинг изображений

from grab import Grab
def main():
    g = Grab()
    g.setup(hammer_mode=True, hammer_timeouts=((2, 5), (10, 15), (20, 30)))
    a = 4
    i = 0 
    while a < 650:
        g.go('http://www.anekdotov-mnogo.ru/smeshnie_kartinki.php?page=%s' % a)
        print ('page-%d' % a)
        for elem in g.doc.select('//div[@class="line_old_content"]/p/img/@src'):
            img_url = 'http://www.anekdotov-mnogo.ru%s' % elem.text().lstrip('.')
            g.go(img_url)
            g.response.save('%d.jpg' % i)
            print ('foto-%d' % i)
            i += 1
        a += 1
if __name__ == '__main__':
    main()

1. Граб может сохранять ответ, в каком виде он ни был бы.
2. Почитайте про синтаксис икспасов.
3. Для собирания строк используйте format или %.
4. Парсер сам должен искать колво сттраниц по которым он будет ходить, или же сам опередлять на какую страницу ему идти дальше.
5. Использовать случайны числа для имен плохая идея, могут быть сгенирированно число которое уже появлялось раньше и уже существующий файл будет перезаписан.
6. Зачем нужна задержка? (Если что граб такое уметь делать сам).



————–
Зимой и летом heavy metall.
Технический прогресс - это падение вверх. Alex_HH (с)
Эстетизация жестокости есть квинтэссенция смысла человеческого существования. Alex_HH (с)
После бога идет не пустота, там метаданные. Alex_HH (с)

Отредактировано Alex_HH (Дек. 18, 2014 17:36:39)

Офлайн

#3 Дек. 19, 2014 04:28:56

Notan1310
Зарегистрирован: 2014-09-14
Сообщения: 98
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг изображений

Спасибо!!! Объемный ответ! Иной раз делаешь для себя, работает и ладно поэтому времени на качество кода и качество знаний не уделяешь.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version