Python 如何通过具有身份验证的代理将scrapy与internet连接一起使用

Python 如何通过具有身份验证的代理将scrapy与internet连接一起使用,python,proxy,web-scraping,scrapy,Python,Proxy,Web Scraping,Scrapy,我的internet连接是通过具有身份验证的代理进行的,当我尝试运行ScrayLibrary以创建更简单的示例时,例如: scrapy shell http://stackoverflow.com 在您使用XPath选择器请求某些内容之前,一切都正常。下一个响应是: >>> hxs.select('//title') [<HtmlXPathSelector xpath='//title' data=u'<title>ERROR: Cache Access D

我的internet连接是通过具有身份验证的代理进行的,当我尝试运行ScrayLibrary以创建更简单的示例时,例如:

scrapy shell http://stackoverflow.com
在您使用XPath选择器请求某些内容之前,一切都正常。下一个响应是:

>>> hxs.select('//title')
[<HtmlXPathSelector xpath='//title' data=u'<title>ERROR: Cache Access Denied</title'>]
>hxs.select('//title')
[]
或者,如果您尝试运行在项目中创建的任何spider,则会出现以下错误:

C:\Users\Victor\Desktop\test\test>scrapy crawl test
2012-08-11 17:38:02-0400 [scrapy] INFO: Scrapy 0.16.5 started (bot: test)
2012-08-11 17:38:02-0400 [scrapy] DEBUG: Enabled extensions: LogStats, TelnetCon
sole, CloseSpider, WebService, CoreStats, SpiderState
2012-08-11 17:38:02-0400 [scrapy] DEBUG: Enabled downloader middlewares: HttpAut
hMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, De
faultHeadersMiddleware, RedirectMiddleware, CookiesMiddleware, HttpProxyMiddlewa
re, HttpCompressionMiddleware, ChunkedTransferMiddleware, DownloaderStats
2012-08-11 17:38:02-0400 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMi
ddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddle
ware
2012-08-11 17:38:02-0400 [scrapy] DEBUG: Enabled item pipelines:
2012-08-11 17:38:02-0400 [test] INFO: Spider opened
2012-08-11 17:38:02-0400 [test] INFO: Crawled 0 pages (at 0 pages/min), scraped
0 items (at 0 items/min)
2012-08-11 17:38:02-0400 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:602
4
2012-08-11 17:38:02-0400 [scrapy] DEBUG: Web service listening on 0.0.0.0:6081
2012-08-11 17:38:47-0400 [test] DEBUG: Retrying <GET http://automation.whatismyi
p.com/n09230945.asp> (failed 1 times): TCP connection timed out: 10060: Se produ
jo un error durante el intento de conexi¾n ya que la parte conectada no respondi
¾ adecuadamente tras un periodo de tiempo, o bien se produjo un error en la cone
xi¾n establecida ya que el host conectado no ha podido responder..
2012-08-11 17:39:02-0400 [test] INFO: Crawled 0 pages (at 0 pages/min), scraped
0 items (at 0 items/min)
...
2012-08-11 17:39:29-0400 [test] INFO: Closing spider (finished)
2012-08-11 17:39:29-0400 [test] INFO: Dumping Scrapy stats:
{'downloader/exception_count': 3,
  'downloader/exception_type_count/twisted.internet.error.TCPTimedOutError': 3,
     'downloader/request_bytes': 732,
     'downloader/request_count': 3,
     'downloader/request_method_count/GET': 3,
     'finish_reason': 'finished',
     'finish_time': datetime.datetime(2012, 8, 11, 21, 39, 29, 908000),
     'log_count/DEBUG': 9,
     'log_count/ERROR': 1,
     'log_count/INFO': 5,
     'scheduler/dequeued': 3,
     'scheduler/dequeued/memory': 3,
     'scheduler/enqueued': 3,
     'scheduler/enqueued/memory': 3,
     'start_time': datetime.datetime(2012, 8, 11, 21, 38, 2, 876000)}
2012-08-11 17:39:29-0400 [test] INFO: Spider closed (finished)
C:\Users\Victor\Desktop\test\test>scrapy-crawl测试
2012-08-11 17:38:02-0400[scrapy]信息:scrapy 0.16.5已启动(机器人:测试)
2012-08-11 17:38:02-0400[scrapy]调试:启用的扩展:LogStats、TelnetCon
sole、CloseSpider、WebService、CoreStats、SpiderState
2012-08-11 17:38:02-0400[scrapy]调试:启用下载程序中间件:httpout
HMIDware、DownloadTimeoutMiddleware、UserAgentMiddleware、RetryMiddleware、De
faultHeadersMiddleware,重定向中间件,CookiesMiddleware,HttpProxyMiddlewa
re、HttpCompressionMiddleware、ChunkedTransferMiddleware、DownloaderStats
2012-08-11 17:38:02-0400[scrapy]调试:启用的蜘蛛中间件:HttpErrorMi
ddleware,OffsiteMiddleware,RefererMiddle,UrlLengthMiddleware,DepthMiddle
器皿
2012-08-11 17:38:02-0400[scrapy]调试:启用的项目管道:
2012-08-11 17:38:02-0400[测试]信息:十字轴已打开
2012-08-11 17:38:02-0400[测试]信息:抓取0页(以0页/分钟的速度),刮取
0项(每分钟0项)
2012-08-11 17:38:02-0400[scrapy]调试:Telnet控制台在0.0.0.0:602上侦听
4.
2012-08-11 17:38:02-0400[scrapy]调试:Web服务侦听0.0.0.0:6081
2012-08-11 17:38:47-0400[测试]调试:重试(失败1次):TCP连接超时:10060:Se produ
如果双方没有回应,双方都会有错误
¾在tiempo的周期性交易中,如果生产过程中出现错误
西席建立了一个无障碍的反应器。
2012-08-11 17:39:02-0400[测试]信息:抓取0页(以0页/分钟的速度),刮取
0项(每分钟0项)
...
2012-08-11 17:39:29-0400[测试]信息:关闭十字轴(已完成)
2012-08-11 17:39:29-0400[测试]信息:倾倒碎屑统计数据:
{'downloader/exception_count':3,
'downloader/exception\u type\u count/twisted.internet.error.TCPTimedOutError':3,
“下载程序/请求字节”:732,
“下载程序/请求计数”:3,
“下载程序/请求方法\计数/获取”:3,
“完成原因”:“完成”,
“完成时间”:datetime.datetime(2012,8,11,21,39,29908000),
“日志计数/调试”:9,
“日志计数/错误”:1,
“日志计数/信息”:5,
“调度程序/出列”:3,
“调度程序/出列/内存”:3,
“调度程序/排队”:3,
“调度程序/排队/内存”:3,
“开始时间”:datetime.datetime(2012,8,11,21,38,2876000)}
2012-08-11 17:39:29-0400[测试]信息:十字轴关闭(完成)

看来我的代理就是问题所在。如果有人知道如何将scrapy与身份验证代理一起使用,请告诉我。

scrapy通过以下方式支持代理:

该中间件通过设置 请求对象的代理元值。就像Python标准一样 库模块urllib和urllib2,它遵循以下环境 变量:

  • http_代理
  • https\u代理
  • 无代理
另见:


重复马哈茂德·阿卜杜勒·法塔赫的回答,因为该页面现在不可用。值得赞扬的是他,然而,我做了一些轻微的修改

如果已经存在
middleware.py
,请向其中添加以下代码

class ProxyMiddleware(object):
    # overwrite process request
    def process_request(self, request, spider):
        # Set the location of the proxy
        request.meta['proxy'] = "http://YOUR_PROXY_IP:PORT"

        # Use the following lines if your proxy requires authentication
        proxy_user_pass = "USERNAME:PASSWORD"
        # setup basic authentication for the proxy
        encoded_user_pass = base64.encodestring(proxy_user_pass.encode())
        #encoded_user_pass = base64.encodestring(proxy_user_pass)
        request.headers['Proxy-Authorization'] = 'Basic ' + \
            str(encoded_user_pass)
在settings.py文件中,添加以下代码

    DOWNLOADER_MIDDLEWARES = {
    'project_name.middlewares.ProxyMiddleware': 100,
}

这应该通过设置http\u代理来实现。然而,在我的例子中,我正在尝试使用HTTPS协议访问URL,需要设置
HTTPS\u proxy
,我仍在调查。这方面的任何线索都会有很大帮助。

问题是第一个链接对我不起作用,我不知道为什么,第二个链接已经读过了,我不知道设置http\U代理变量的方法,如果你帮我设置了
http\U代理
https\U代理
环境变量?是的,问题已经解决了,谢谢。该链接非常有用。@alecxe我可以为每个请求设置https\u代理吗?如果有人正在寻找第一个链接,wbwm会有它:
https://web.archive.org/web/*/mahmoud.abdel fattah.net/2012/04/07/使用带有代理的scrapy/