论坛首页 编程语言技术论坛

通过搭建squid实现爬虫需求

浏览 412 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2021-05-26  
在我们日常数据采集过程中肯定会遇到这样的一些问题,比如我们的程序在使用代理过程中不支持用户认证模式、我们需要对一些数据做缓存或者需要过滤一些数据。那么我们可以通过搭建squid,然后设置squid的上联代理为爬虫代理,来实现上面的需求。如今环绕在我们身边的热点话题就是你打疫苗了吗?那么我们今天就发挥python的功底,获取一些关于世界各国接种疫苗的最新信息。
这个网站记录了各国的接种数据信息,我们就通过https://ourworldindata.org/covid-vaccinations来了解下最新的各国接种疫苗信息。
我们可以用Proxy-Tunnel来控制代理IP,在HTTPS的情况下,还可以直接通过TCP链接断开的方式来控制代理IP,更多例子可以参考 https://www.16yun.cn/help/ss_demo/
完整代码如下:
#! -*- encoding:utf-8 -*-
import requests
import random
import requests.adapters
# 要访问的目标页面
targetUrlList = [
            "https://ourworldindata.org/covid-vaccinations",
]
# 代理服务器(产品官网 www.16yun.cn)
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
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics