2015-10-08 3 views
4

Я использую scrapy для очистки некоторых веб-страниц. Я написал свой собственный класс ProxyMiddleware, в котором я выполнил свое требование в process_request (self, request, spider). Вот мой код (копируется):Как использовать Downloader Middleware в Scrapy

class ProxyMiddleware(scrapy.downloadermiddlewares.httpproxy): 
def __init__(self, proxy_ip=''): 
    self.proxy_ip = proxy_ip 

def process_request(self,request,spider): 
    ip = random.choice(self.proxy_list) 
    if ip: 
     request.meta['proxy'] = ip 
    return request 

proxy_list = [list of proxies] 

Теперь я не понимаю, как SCRAPY будет рассматривать мою реализацию вместо класса по умолчанию. После некоторых поисков и мозгового штурма, что я понял, есть, мне нужно внести изменения в settings.py

DOWNLOADER_MIDDLEWARES = { 
    'IPProxy.middlewares.MyCustomDownloaderMiddleware': 543, 
    'IPProxy.IPProxy.spiders.RandomProxy': 600 
} 

Для лучшего понимания моей структуры проекта для читателей, я добавил второй элемент в списке с некоторой случайной величиной. Моя структура проекта:

enter image description here

Мой вопрос,

  • Как использовать DOWNLOADER_MIDDLEWARES в settings.py правильно
  • Как присвоить значения элементам в DOWNLOADER_MIDDLEWARES
  • Как сделать scrapy для вызова моего настроенного кода вместо значения по умолчанию

ответ

1

Если вы хотите отключить, предполагая, встроенный HttpProxyMiddleware Downloader Middleware - установите его значение в DOWNLOADER_MIDDLEWARES для None:

DOWNLOADER_MIDDLEWARES = { 
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None, 
    'IPProxy.middlewares.MyCustomDownloaderMiddleware': 543, 
    'IPProxy.IPProxy.spiders.RandomProxy': 600 
} 
+0

Thankyou. Еще одна двусмысленность заключается в том, что способ, которым я написал процесс process_request класса ProxyMiddleware, переопределит процесс process_request по умолчанию scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware. –

+0

DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': Нет, '' IPProxy.IPProxy.spiders.ProxyMiddleware: 600, 'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': Нет, «IPProxy.IPProxy .spiders.RotateUserAgentMiddleware ': 700 } Теперь мой код проходит Нет имени модуля UserAgentMiddleware Exception. Как можно использовать мой настраиваемый класс здесь. –

+0

@Ashwanth Я думаю, что это 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware'. – alecxe

 Смежные вопросы

  • Нет связанных вопросов^_^