Запуск scrapy splash с прокси - PullRequest
0 голосов
/ 03 ноября 2018

Я использую прокси в склепе, но постоянно получаю 502 прокси, меня это беспокоит несколько дней.

мое программное обеспечение для скачивания:

class ABProxyMiddleware(HttpProxyMiddleware):
""" 阿布云ip代理配置 """
proxyAuth = "Basic " + base64.urlsafe_b64encode(
    bytes((settings['PROXY_USER'] + ":" + settings['PROXY_PASS']), "ascii")).decode("utf-8")

def process_request(self, request, spider):
    request.meta['splash']['args']['proxy'] = settings['PROXY_SERVER']
    request.headers['Proxy-Authorization'] = self.proxyAuth

мои запросы:

yield SplashRequest(url= 'http://www.qidian.com/all?chanId=4&subCateId=130&orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page=' + str(
                i),callback=self.book_parse, endpoint='render.html')

мои настройки:

DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
'tempScrapy.middlewares.ABProxyMiddleware': 100,

}

Я уверен, что все настройки для прокси верны, и прокси действителен, потому что он будет успешным без всплеска

1 Ответ

0 голосов
/ 04 ноября 2018

Согласно вашему коду вы отправляете заголовки аутентификации прокси на Splash-сервер:

+-------------+
| Your spider |
+------+------+
       |
       | Proxy Authentication
       v
+------+-------+
|   Splash     |
+------+-------+
       |
       |
       v
+------+-------+
| Proxy server |
+------+-------+
       |
       |
       v
+------+-------+
| Target site  |
+--------------+

Сервер Splash просто проигнорирует отправленный вами заголовок проверки подлинности прокси, и, таким образом, прокси-сервер отклонит ваш запрос из-за неудачной проверки подлинности.

Нужно сделать так, чтобы Splash отправлял заголовок аутентификации прокси:

+-------------+
| Your spider |
+------+------+
       |
       |
       v
+------+-------+
|   Splash     |
+------+-------+
       |
       | Proxy Authentication
       v
+------+-------+
| Proxy server |
+------+-------+
       |
       |
       v
+------+-------+
| Target site  |
+--------------+

Так что вам нужно удалить эту строку:

request.headers['Proxy-Authorization'] = self.proxyAuth

и правильно настройте информацию прокси:

request.meta['splash']['args']['proxy'] = 'proxy info of format: [protocol://][user:password@]proxyhost[:port]'

См. Также: Ссылка API Splash (ищите аргумент proxy)

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