在 meta 中设置 https 代理的正确方法是什么?

What is the correct way to set up an https proxy within meta?

我创建了一个脚本,使用 scrapy 在其中实施代理以从网站获取内容。该脚本似乎工作正常。我试图从中获取数据的网站是 https://www.zillow.com/miami-fl-33166/.

因为这是一个 https 站点并且我正在使用 https 代理,所以我设置了如下代理:

request.meta['proxy'] = 'https://123.200.20.242:58847' 

但是,当我今天不小心将 https 更改为 http 后执行脚本时,如下所示,我注意到脚本仍然有效。

request.meta['proxy'] = 'http://123.200.20.242:58847'

这就是我在中间件中实现代理的方式:

def process_request(self, request, spider):
    request.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
    request.meta['proxy'] = 'https://123.200.20.242:58847'
    # request.meta['proxy'] = 'http://123.200.20.242:58847'

这是参考:

DOWNLOADER_MIDDLEWARES = {
    'customized_bot.proxy_middleware.ProxiesMiddleware': 100,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': None,
}

What is right way to set up https proxies within meta?

https 代理的使用与使用 http 代理没有任何不同。您只需将代理地址从使用 http 更改为使用 https。请参阅 zyte.com 上的这篇文章,了解如何使用 https 代理。总而言之,您可以:

  1. 制作 scrapy.Request
  2. 时通过 meta object 传递代理
  3. 设置自定义 scrapy middleware,将代理 header 添加到每个 scrapy Requestzyte.com
  4. 中提供的模式详细信息

为了回答您的问题,httphttps 代理可以互换使用以抓取 httphttps 网址。