Я использую 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
}
Для лучшего понимания моей структуры проекта для читателей, я добавил второй элемент в списке с некоторой случайной величиной. Моя структура проекта:
Мой вопрос,
- Как использовать DOWNLOADER_MIDDLEWARES в settings.py правильно
- Как присвоить значения элементам в DOWNLOADER_MIDDLEWARES
- Как сделать scrapy для вызова моего настроенного кода вместо значения по умолчанию
Thankyou. Еще одна двусмысленность заключается в том, что способ, которым я написал процесс process_request класса ProxyMiddleware, переопределит процесс process_request по умолчанию scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware. –
DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': Нет, '' IPProxy.IPProxy.spiders.ProxyMiddleware: 600, 'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': Нет, «IPProxy.IPProxy .spiders.RotateUserAgentMiddleware ': 700 } Теперь мой код проходит Нет имени модуля UserAgentMiddleware Exception. Как можно использовать мой настраиваемый класс здесь. –
@Ashwanth Я думаю, что это 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware'. – alecxe