宁为玉碎,不为瓦全
分类: 云计算
2021-05-26 16:16:00
在我们日常数据采集过程中肯定会遇到这样的一些问题,比如我们的程序在使用代理过程中不支持用户认证模式、我们需要对一些数据做缓存或者需要过滤一些数据。那么我们可以通过搭建squid,然后设置squid的上联代理为爬虫代理,来实现上面的需求。如今环绕在我们身边的热点话题就是你打疫苗了吗?那么我们今天就发挥python的功底,获取一些关于世界各国接种疫苗的最新信息。
这个网站记录了各国的接种数据信息,我们就通过来了解下最新的各国接种疫苗信息。
我们可以用Proxy-Tunnel来控制代理IP,在HTTPS的情况下,还可以直接通过TCP链接断开的方式来控制代理IP,更多例子可以参考
完整代码如下:
#! -*- encoding:utf-8 -*- import requests import random import requests.adapters # 要访问的目标页面 targetUrlList = [ "", ] # 代理服务器(产品官网 ) proxyHost = "localhost" proxyPort = "3128" proxyMeta = "http://%(host)s:%(port)s" % { "host": proxyHost, "port": proxyPort, } # 设置 http和https访问都是用HTTP代理 proxies = { "http": proxyMeta, "https": proxyMeta, } # 设置IP切换头 tunnel = random.randint(1, 10000) headers = {"Proxy-Tunnel": str(tunnel)} class HTTPAdapter(requests.adapters.HTTPAdapter): def proxy_headers(self, proxy): headers = super(HTTPAdapter, self).proxy_headers(proxy) if hasattr(self, 'tunnel'): headers['Proxy-Tunnel'] = self.tunnel return headers # 访问三次网站,使用相同的tunnel标志,均能够保持相同的外网IP for i in range(3): s = requests.session() a = HTTPAdapter() # 设置IP切换头 a.tunnel = tunnel s.mount('https://', a) for url in targetUrlList: r = s.get(url, proxies=proxies) print r.text