Я могу очистить страницы без использования прокси. Однако, когда я добавляю прокси, scrapy либо дает Error downloading: Connection was refused by other side: 61: Connection refused
, либо [<twisted.python.failure.Failure twisted.internet.error.ConnectionLost: Connection to the other side was lost in a non-clean fashion.>]
, либо вызывает исключение тайм-аута. Прокси-серверы находятся в типе http.Scrapy: ошибка загрузки с прокси
Вот что я добавляю к setting.py
PROXIES = [{'ip_port': '213.136.90.232:8080', 'user_pass': ''},]
DOWNLOADER_MIDDLEWARES = {
'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware' : 100,
'judgeinfo.middleware.RotateUserAgentMiddleware' :1,
'judgeinfo.middleware.ProxyMiddleware' :100,
}
А вот мой middleware.py
import random
import base64
from settings import PROXIES
class ProxyMiddleware(object):
def process_request(self, request, spider):
proxy = random.choice(PROXIES)
if proxy['user_pass'] is not None:
request.meta['proxy'] = "http://%s" % proxy['ip_port']
encoded_user_pass = base64.encodestring(proxy['user_pass'])
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
print "**************ProxyMiddleware have pass************" + proxy['ip_port']
else:
print "**************ProxyMiddleware no pass************" + proxy['ip_port']
request.meta['proxy'] = "http://%s" % proxy['ip_port']
Я проверил прокси с помощью локон и вернулся правильные ответы.
curl -L 'http://IP:port' -v "http://www.stackoverflow.com"
Я также добавил случайно выбранные USER_AGENT и установите DOWNLOAD_DELAY = 3
SCRAPY обычно использует 'b64encode' insteaf из' encodestring', как 'encodestring' добавляет символ новой строки в конце закодированной строки, попробуйте зачистки эту строку или с помощью' b64encode ("mystr ing "). strip()' – eLRuLL
Это решает мою проблему! Благодаря! @eLRuLL –