Найти - Пользователи
Полная версия: Парсинг изображений
Начало » Python для новичков » Парсинг изображений
1
Notan1310
Доброго времени суток. Объясните пожалуйста где ошибаюсь.

# -*- 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 

Alex_HH
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. Зачем нужна задержка? (Если что граб такое уметь делать сам).
Notan1310
Спасибо!!! Объемный ответ! Иной раз делаешь для себя, работает и ладно поэтому времени на качество кода и качество знаний не уделяешь.
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