Найти - Пользователи
Полная версия: в Grab.Spider задать прокси для каждого запроса
Начало » Python для новичков » в Grab.Spider задать прокси для каждого запроса
1
ajib6ept
Использовал пример из документации. В группе было предложено модифицировать передаваемый grab объект, у меня выдает ошибку “SpiderMisuseError: Options url and grab could not be used together” Как правильно задать proxy?

#coding: utf-8
import logging
from grab import Grab
from grab.spider import Spider, Task
class ExampleSpider(Spider):
    initial_urls = ['http://habrahabr.ru/']
    def task_initial(self, grab, task):
        #print 'Habrahabr home page'
        for elem in grab.doc.select('//h1[@class="title"]/a[@class="post_title"]'):
            grab = Grab()
            grab.setup(proxy='219.93.183.106:8080', proxy_type='http')
            yield Task('habrapost', url=elem.attr('href'), grab=grab)
    def task_habrapost(self, grab, task):
        #print 'Habrahabr topic: %s' % task.url
        print grab.doc.select('//h1').text().encode('utf-8')
if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)
    bot = ExampleSpider(thread_number=2)
    bot.run()
ajib6ept
Посмотрел исходный код, если немного модифицировать, то все рабоает. Т.е. если Url передавать не task, а в grab объект и только его передавать. Это правильный подход?
            
grab.config['url'] = elem.attr('href')
yield Task('habrapost', grab=grab)
ihor_ua
ajib6ept
Посмотрел исходный код, если немного модифицировать, то все рабоает. Т.е. если Url передавать не task, а в grab объект и только его передавать. Это правильный подход?
Да очень костыльно.
Почему бы не передавать настроенный обджект и url?

Напиши автору что он архитектор от бога.
ihor_ua
g.load_proxylist('proxy_list.txt', source_type='text_file', proxy_type='http', auto_change=True )
Alen
Версии python и grab какие?

ajib6ept
        for elem in grab.doc.select('//h1[@class="title"]/a[@class="post_title"]'):
            grab = Grab(url=elem.attr('href'))
            grab.setup(proxy='219.93.183.106:8080', proxy_type='http')
            yield Task('habrapost', grab=grab)

вот еще вариант, получше.


Версии python и grab какие?

grab 0.4.13
python 2.7.6
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