Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 13, 2014 19:19:59

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

в Grab.Spider задать прокси для каждого запроса

Использовал пример из документации. В группе было предложено модифицировать передаваемый 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()



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#2 Сен. 13, 2014 19:25:14

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

в Grab.Spider задать прокси для каждого запроса

Посмотрел исходный код, если немного модифицировать, то все рабоает. Т.е. если Url передавать не task, а в grab объект и только его передавать. Это правильный подход?

            
grab.config['url'] = elem.attr('href')
yield Task('habrapost', grab=grab)



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#3 Сен. 13, 2014 19:32:44

ihor_ua
Зарегистрирован: 2013-03-23
Сообщения: 36
Репутация: +  -2  -
Профиль   Отправить e-mail  

в Grab.Spider задать прокси для каждого запроса

ajib6ept
Посмотрел исходный код, если немного модифицировать, то все рабоает. Т.е. если Url передавать не task, а в grab объект и только его передавать. Это правильный подход?
Да очень костыльно.
Почему бы не передавать настроенный обджект и url?

Напиши автору что он архитектор от бога.

Офлайн

#4 Сен. 13, 2014 19:35:11

ihor_ua
Зарегистрирован: 2013-03-23
Сообщения: 36
Репутация: +  -2  -
Профиль   Отправить e-mail  

в Grab.Spider задать прокси для каждого запроса

g.load_proxylist('proxy_list.txt', source_type='text_file', proxy_type='http', auto_change=True )

Офлайн

#5 Сен. 13, 2014 19:39:12

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

в Grab.Spider задать прокси для каждого запроса

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

Офлайн

#6 Сен. 13, 2014 20:09:59

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

в Grab.Spider задать прокси для каждого запроса

        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



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version