首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scrapy:meta['proxies']还是meta['proxy']?

Scrapy:meta['proxies']还是meta['proxy']?
EN

Stack Overflow用户
提问于 2018-09-07 16:26:02
回答 1查看 794关注 0票数 0

我在scrapy方面是新手。我在scrapy爬虫中使用了一个自定义代理,但我发现如果我使用request.meta“代理”,爬虫会工作得很好,而不是使用request.meta“proxy”。这与this answer不同

如果我使用request.meta‘’proxy‘,这是我调试消息的一部分。

代码语言:javascript
复制
2018-09-07 15:48:45 [scrapy.core.engine] INFO: Spider opened
2018-09-07 15:48:45 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2018-09-07 15:48:45 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2018-09-07 15:49:45 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2018-09-07 15:50:45 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2018-09-07 15:51:45 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2018-09-07 15:51:45 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.example.com/robots.txt> (failed 1 times): User timeout caused connection failure: Getting https://www.example.com/robots.txt took longer than 180.0 seconds..
2018-09-07 15:52:45 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)

我的scrapy版本

代码语言:javascript
复制
Scrapy       : 1.5.1
lxml         : 3.7.2.0
libxml2      : 2.9.4
cssselect    : 1.0.3
parsel       : 1.5.0
w3lib        : 1.19.0
Twisted      : 18.7.0
Python       : 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]
pyOpenSSL    : 18.0.0 (OpenSSL 1.1.0h  27 Mar 2018)
cryptography : 2.3
Platform     : Windows-10-10.0.17134-SP0

更新:我已经解决了之前的problem.But,我不知道为什么我的元‘代理’是错误的,我的免费代理使用requests.get('https://www.example.com/', proxies={"http": "http://{}".format(proxy)}),它工作得很好,并返回<Response [200]>,那么我的代码有什么问题?

我的设置:

代码语言:javascript
复制
DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':135,
     'ip_proxy.middlewares.CustomProxyMiddleware':125
}

我的蜘蛛:

代码语言:javascript
复制
 def start_requests(self):
    yield scrapy.Request(url="https://www.example.com",callback=self.parse_first)

我的CustomProxyMiddleware

代码语言:javascript
复制
class CustomProxyMiddleware(object):

  def __init__(self, settings):
      pass
  def process_request(self, request, spider):
      request.meta['proxy'] = "https://60.169.1.145:808"

  @classmethod
  def from_crawler(cls, crawler):
      return cls(crawler.settings)
EN

回答 1

Stack Overflow用户

发布于 2018-09-07 18:27:33

要使用代理服务器发送请求,应使用meta['proxy']。看起来你的代理服务器有一些问题,这就是为什么它无法抓取页面,导致超时错误。这也可能是因为您使用了免费的代理。

您的爬行器使用meta['proxies']的原因是,设置此元素不会影响任何内容,并且请求是从您的本地IP发送的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52218418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档