Как установить различные параметры лечения для разных пауков?
Я хочу включить некоторый http-прокси для некоторых пауков и отключить их для других пауков.
Могу ли я сделать что-то вроде этого?
# settings.py
proxy_spiders = ['a1' , b2']
if spider in proxy_spider: #how to get spider name ???
HTTP_PROXY = 'http://127.0.0.1:8123'
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.RandomUserAgentMiddleware': 400,
'myproject.middlewares.ProxyMiddleware': 410,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None
}
else:
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.RandomUserAgentMiddleware': 400,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None
}
Если код выше не работает, есть ли другое предложение?
Ответы
Ответ 1
Вы можете определить свое собственное промежуточное ПО прокси, что-то прямое:
from scrapy.contrib.downloadermiddleware import HttpProxyMiddleware
class ConditionalProxyMiddleware(HttpProxyMiddleware):
def process_request(self, request, spider):
if getattr(spider, 'use_proxy', None):
return super(ConditionalProxyMiddleware, self).process_request(request, spider)
Затем определите атрибут use_proxy = True
в пауках, для которого вы хотите включить прокси. Не забудьте отключить промежуточное программное обеспечение прокси-сервера по умолчанию и включить измененный.
Ответ 2
немного поздно, но начиная с версии 1.0.0 появилась новая функция в scrapy, где вы можете переопределить настройки для паука следующим образом:
class MySpider(scrapy.Spider):
name = "my_spider"
custom_settings = {"HTTP_PROXY":'http://127.0.0.1:8123',
"DOWNLOADER_MIDDLEWARES": {'myproject.middlewares.RandomUserAgentMiddleware': 400,
'myproject.middlewares.ProxyMiddleware': 410,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None}}
class MySpider2(scrapy.Spider):
name = "my_spider2"
custom_settings = {"DOWNLOADER_MIDDLEWARES": {'myproject.middlewares.RandomUserAgentMiddleware': 400,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None}}
Ответ 3
Существует новый и более простой способ сделать это.
class MySpider(scrapy.Spider):
name = 'myspider'
custom_settings = {
'SOME_SETTING': 'some value',
}
Я использую Scrapy 1.3.1
Ответ 4
Вы можете добавить settings.overrides в файл spider.py
Пример, который работает:
from scrapy.conf import settings
settings.overrides['DOWNLOAD_TIMEOUT'] = 300
Для вас, что-то вроде этого также должно работать
from scrapy.conf import settings
settings.overrides['DOWNLOADER_MIDDLEWARES'] = {
'myproject.middlewares.RandomUserAgentMiddleware': 400,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None
}
Ответ 5
Почему бы не использовать два проекта, а не только один?
Назовите эти два проекта с помощью proj1
и proj2
. В proj1
settings.py
введите следующие настройки:
HTTP_PROXY = 'http://127.0.0.1:8123'
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.RandomUserAgentMiddleware': 400,
'myproject.middlewares.ProxyMiddleware': 410,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None
}
В proj2
settings.py
введите следующие настройки:
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.RandomUserAgentMiddleware': 400,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None
}