Уведомления

Группа в Telegram: @pythonsu

#1 Май 28, 2014 16:42:45

ctocopok
От:
Зарегистрирован: 2011-04-09
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Grab - грабим файлы с сайта перебором

Есть некий сайт, типа фотогалереи, по счастью для граббера - файлы поименованы примерно как “3782796.jpg”

На них, в основном, есть ссылки на основном, большом сайте, но до его парсинга пока я не добрался. Решил поработать брутфорсом.

Нумерация не сквозная, то есть 3782796.jpg есть, а 3782795.jpg и 3782797.jpg может не быть.
в лоб попробовал сделать примерно следующее:

from grab import Grab
numstart = 3000000
numend   = 4000000
g = Grab()
for i in xrange(numstart, numend):
   url = prefix + str(i)+'.jpg'
   g.setup(method = 'HEAD')
   g.go(url)
   if g.response.code == 200:
      print i, 'we are lucky'
   else:
      continue
Ну, я еще понаписал всякой диагностики, обработку ошибок какую-никакую.
Суть в чем - при запуске этого безобразия “в лоб”, скорость работы составляет примерно 4-5 запросов в секунду, а значит, перебор всех представленных выше вариантов займет примерно 2.5 суток. Долгонько.
Разделил диапазон на 10 других, по 100 тыс. урлов, сделал батник (я на винде):
start python leech.py 3000000
start python leech.py 3100000
start python leech.py 3200000
...
start python leech.py 3900000
Запуск 10 этих потоков на скорости никак не сказался, то есть ограничение - внутри питона, а не в системе или канале.

Внимание, вопрос. Как бы это безобразие переписать в эффективное асинхронное (?) мультипоточное(?) дело с блэкджеком и обработчиками?
Пока что я только пишу результаты (валидные УРЛы) в файл, а потом же еще и сами файлы захочется скачать….
Очевидно, надо в сторону Grab::Spider, но что-то не сварить мне пока его в голове.
Может кто-нибудь “прототип” написать? Или я хочу чего-то, что и так в доках описано?



Advertising the only makes people buy things they don't need.

Офлайн

#2 Май 28, 2014 17:19:53

ctocopok
От:
Зарегистрирован: 2011-04-09
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Grab - грабим файлы с сайта перебором

Из документации на spider я понял, что задается некий стартовый URL, разбирая который с помощью

for elem in grab.xpath_list('//h1[@class="title"]/a[@class="post_title"]'):
    yield Task('habrapost', url=elem.get('href'))

генерятся задания на последующий обход (и иные действия).

Из того, что есть сейчас, я получу перечень урлов на скачивание. Можно ли этот перечень скачать грабов в несколько потоков? Как?
могу, конечно, залить это на тестовый веб-сервер и пройтись прямо как в документации, но хотелось бы большего понимания и осмысленного манипулирования данными :)



Advertising the only makes people buy things they don't need.

Офлайн

#3 Май 28, 2014 18:36:15

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Grab - грабим файлы с сайта перебором

ctocopok
Можно ли этот перечень скачать грабов в несколько потоков? Как?
при запуске указать в сколько потоков скачивать.

Ты сам создаешь инстанс граба или запускаешь через grab cli ?

Офлайн

#4 Май 29, 2014 08:31:53

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Grab - грабим файлы с сайта перебором

Самый быстрый вариант - Spider. Помедленее - использовать потоки, вот уже написанная обертка для потоков.



Офлайн

#5 Май 29, 2014 09:23:36

ctocopok
От:
Зарегистрирован: 2011-04-09
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Grab - грабим файлы с сайта перебором

Так, с тем, как скормить пауку перечень урлов, я понял. Пример из доков помог.

class ExampleSpider(Spider):
    def task_generator(self):
        for line in open('var/urls.txt'):
            yield Task('download', url=line.strip())

Инстанс создаю, видимо, как в коде из первого сообщения.

По всей видимости, мне дальше надо написать def task_download, в котором прописать скачивание и сохранение нужных jpg.



Advertising the only makes people buy things they don't need.

Офлайн

#6 Янв. 14, 2015 14:55:15

ihasseb
Зарегистрирован: 2015-01-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Grab - грабим файлы с сайта перебором

Ну, я еще понаписал всякой диагностики, обработку ошибок какую-никакую.
Суть в чем - при запуске этого безобразия “в лоб”, скорость работы составляет примерно 4-5 запросов в секунду, а значит, перебор всех представленных выше вариантов займет примерно 2.5 суток. Долгонько



aliiiiiii

Офлайн

#7 Янв. 14, 2015 14:55:15

ihasseb
Зарегистрирован: 2015-01-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Grab - грабим файлы с сайта перебором

Ну, я еще понаписал всякой диагностики, обработку ошибок какую-никакую.
Суть в чем - при запуске этого безобразия “в лоб”, скорость работы составляет примерно 4-5 запросов в секунду, а значит, перебор всех представленных выше вариантов займет примерно 2.5 суток. Долгонько



aliiiiiii

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version