Форум сайта python.su
Есть некий сайт, типа фотогалереи, по счастью для граббера - файлы поименованы примерно как “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
start python leech.py 3000000 start python leech.py 3100000 start python leech.py 3200000 ... start python leech.py 3900000
Офлайн
Из документации на spider я понял, что задается некий стартовый URL, разбирая который с помощью
for elem in grab.xpath_list('//h1[@class="title"]/a[@class="post_title"]'): yield Task('habrapost', url=elem.get('href'))
Офлайн
ctocopokпри запуске указать в сколько потоков скачивать.
Можно ли этот перечень скачать грабов в несколько потоков? Как?
Офлайн
Самый быстрый вариант - Spider. Помедленее - использовать потоки, вот уже написанная обертка для потоков.
Офлайн
Так, с тем, как скормить пауку перечень урлов, я понял. Пример из доков помог.
class ExampleSpider(Spider): def task_generator(self): for line in open('var/urls.txt'): yield Task('download', url=line.strip())
Офлайн
Ну, я еще понаписал всякой диагностики, обработку ошибок какую-никакую.
Суть в чем - при запуске этого безобразия “в лоб”, скорость работы составляет примерно 4-5 запросов в секунду, а значит, перебор всех представленных выше вариантов займет примерно 2.5 суток. Долгонько
Офлайн
Ну, я еще понаписал всякой диагностики, обработку ошибок какую-никакую.
Суть в чем - при запуске этого безобразия “в лоб”, скорость работы составляет примерно 4-5 запросов в секунду, а значит, перебор всех представленных выше вариантов займет примерно 2.5 суток. Долгонько
Офлайн