Запрос не передается через промежуточное ПО - PullRequest
1 голос
/ 01 мая 2019

Я написал скрипт в scrapy, чтобы запрос проходил через специальное промежуточное программное обеспечение для того, чтобы этот запрос был проксирован.Однако сценарий, похоже, не имеет никакого эффекта от этого промежуточного программного обеспечения.Когда я печатаю response.meta, я получаю {'download_timeout': 180.0, 'download_slot': 'httpbin.org', 'download_latency': 0.9680554866790771}, что ясно указывает на то, что мой запрос не проходит через пользовательское промежуточное ПО.Я использовал CrawlerProcess для запуска скрипта.

spider содержит:

import scrapy
from scrapy.crawler import CrawlerProcess

class ProxySpider(scrapy.Spider):
    name = "proxiedscript"
    start_urls = ["https://httpbin.org/ip"]

    def parse(self,response):
        print(response.meta)
        print(response.text)

if __name__ == "__main__":
    c = CrawlerProcess({'USER_AGENT':'Mozilla/5.0'})
    c.crawl(ProxySpider)
    c.start()

middleware содержит:

class ProxiesMiddleware(object):
    def process_request(self, request, spider):
        request.meta['proxy'] = 'http://206.189.25.70:3128'
        return request

Изменить это я 'Сделано в settings.py:

DOWNLOADER_MIDDLEWARES = {
    'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,
    'proxyspider.middleware.ProxiesMiddleware': 100,
}

На следующем рисунке показана иерархия проекта: enter image description here

Какое возможное изменение я долженпринести запрос через прокси через промежуточное ПО?

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Вам необходимо проверить вывод журнала этой строки: [scrapy.middleware] INFO: Enabled downloader middlewares: для получения списка активных промежуточных программ загрузчика.Ваше промежуточное ПО должно быть в списке, если оно активно.

Насколько я помню, использование scrapy.contrib модулей устарело. Scrapy: нет модуля с именем 'scrapy.contrib'

Ваш код с пользовательским промежуточным программным обеспечением почти готов к использованию инструмента командной строки scrapy
scrapy crawl proxiedscript.

Hovewer Ваш процесс сканирования должен сначала read_projects_settings, если необходимо запустить приложение scrapy в виде скрипта.
или определить параметр DOWNLOADER_MIDDLEWARES в качестве аргумента для CrawlerProcess:

c = CrawlerProcess({
    'USER_AGENT':'Mozilla/5.0',
    'DOWNLOADER_MIDDLEWARES':{
        #'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,#deprecated in scrapy 1.6
        'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':110, #enabled by default
        'proxyspider.middleware.ProxiesMiddleware': 100, 
                              },
    })
1 голос
/ 01 мая 2019

возможно вернуть None вместо Request?Возврат Request запрещает запуск любых других промежуточных программ загрузчика.

https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#scrapy.downloadermiddlewares.DownloaderMiddleware.process_request

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...