Я хочу использовать прокси только для нескольких конкретных доменов. Я проверяю это, это и это. Если я правильно понимаю, установка прокси с помощью промежуточного программного обеспечения установит прокси для всех запросов.
Как я могу установить прокси для определенного URL-адреса до отправки запроса паука?
В настоящее время мой паук работает нормально со следующей реализацией:
CoreSpider.py
class CoreSpider(scrapy.Spider):
name = "final"
def __init__(self):
self.start_urls = self.read_url()
self.rules = (
Rule(
LinkExtractor(
unique=True,
),
callback='parse',
follow=True
),
)
def read_url(self):
urlList = []
for filename in glob.glob(os.path.join("/root/Public/company_profiler/seed_list", '*.list')):
with open(filename, "r") as f:
for line in f.readlines():
url = re.sub('\n', '', line)
if "http" not in url:
url = "http://" + url
# print(url)
urlList.append(url)
return urlList
def parse(self, response):
print("URL is: ", response.url)
print("User agent is : ", response.request.headers['User-Agent'])
filename = '/root/Public/company_profiler/crawled_page/%s.html' % response.url
article = Extractor(extractor='LargestContentExtractor', html=response.body).getText()
print("Article is :", article)
if len(article.split("\n")) < 5:
print("Skipping to next url : ", article.split("\n"))
else:
print("Continue parsing: ", article.split("\n"))
ContentHandler_copy.ContentHandler_copy.start(article, response.url)
и settings.py
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'random_useragent.RandomUserAgentMiddleware': 320
}
Я запускаю паука, вызывая его через скрипт RunSpider.py
RunSpider.py
from CoreSpider import CoreSpider
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
process = CrawlerProcess(get_project_settings())
process.crawl(CoreSpider)
process.start()
Обновление: CoreSpider.py
class CoreSpider(scrapy.Spider):
name = "final"
def __init__(self):
self.start_urls = self.read_url()
self.rules = (
Rule(LinkExtractor(unique=True), callback='parse', follow=True, process_request='process_request'),
)
def process_request(self, request, spider):
print("Request is : ", request) ### Not printing anything
if 'xxx' in request.url: # <-- set proxy for this URL?
meta = request.get('meta', {})
meta.update({'proxy': 'https://159.8.18.178:8080'})
return request.replace(meta=meta)
return request
.......
Я также пытался установить такой прокси в методе process_request, но не удалось.
request.meta['proxy'] = "https://159.8.18.178:8080"
Заранее спасибо.