7.1.1 requests 配置代理
    import requests
    proxy=’127.0.0.1:1080’
    proxies={
    ‘http’:proxy,
    ‘https’:proxy
    }
    res=requests.get(‘http://httpbin.org/get',proxies=proxies)
    print(res.text)
    image.png
    image.png
    如果代理需要认证,同样在代理的前面加上用户名密码即可 代理的写法就变成如下所示:
    proxy= ‘username:password@127.o.o.1:9743 ‘
    image.png

    1. selenium chrome() 设置代理
    2. import requests
    3. from selenium import webdriver
    4. proxy='127.0.0.1:1080'
    5. chrome_option=webdriver.ChromeOptions()
    6. chrome_option.add_argument('--proxy-server=http://'+proxy)
    7. browser=webdriver.Chrome(chrome_options=chrome_option)
    8. browser.get('http://httpbin.org/get')

    image.png
    image.png
    PhantomJS
    对于 PhantomJS 来说,代理设置方法可以借助 service_args 参数,也就是命令行参数。 代
    理设置, 方法如下所示:

    1. import requests
    2. from selenium import webdriver
    3. service_args=[
    4. '--proxy=127.0.0.1:1080',
    5. '--proxy-type=http'
    6. ]
    7. browser=webdriver.PhantomJS(service_args=service_args)
    8. browser.get('http://httpbin.org/get')
    9. print(browser.page_source)

    image.png
    免费代理池:proxypool
    下载地址:
    https://github.com/jhao104/proxy_pool/
    https://github.com/Python3WebSpider/ProxyPool
    7.2.1 常规方式运行
    如果不使用 Docker 运行,配置好 Python、Redis
    环境之后也可运行,步骤如下。
    7.2.2
    安装和配置 Redis
    https://github.com/microsoftarchive/redis/releases/
    本地安装
    Redis、Docker 启动 Redis、远程 Redis
    都是可以的,只要能正常连接使用即可。
    首先可以需要一下环境变量,代理池会通过环境变量读取这些值。
    设置 Redis 的环境变量有两种方式,一种是分别设置 host、port、password,另一种是设置连接字
    符串,设置方法分别如下:
    设置 host、port、password,如果 password 为空可以设置为空字符串,示例如下:
    export REDIS_HOST=’localhost’
    export REDIS_PORT=6379
    export REDIS_PASSWORD=’’
    export REDIS_DB=0
    或者只设置连接字符串:
    export REDIS_CONNECTION_STRING=’redis://[password]@host:port/db’
    如果没有密码也要设置为:
    export REDIS_CONNECTION_STRING=’redis://@host:port/db’
    这里连接字符串的格式需要符合 redis://[password]@host:port/db 的格式,注意不要遗漏 @。
    以上两种设置任选其一即可。
    7.2.3 安装依赖包
    这里强烈推荐使用 Conda 或 virtualenv 创建虚拟环境,Python 版本不低于 3.6。
    然后
    pip 安装依赖即可:
    pip3 install -r requirements.txt
    pip install -r requirements.txt -i https://pypi.douban.com/simple

    7.2.4 运行代理池
    两种方式运行代理池,一种是 Tester、Getter、Server 全部运行,另一种是按需分别运行。
    一般来说可以选择全部运行,命令如下:
    python run.py
    运行之后会启动 Tester、Getter、Server,这时访问 http://localhost:5555/random 即可获取一个随
    机可用代理。
    或者如果你弄清楚了代理池的架构,可以按需分别运行,命令如下:
    python3 run.py —processor getter
    python3 run.py —processor tester
    python3 run.py —processor server
    这里 processor 可以指定运行 Tester、Getter 还是 Server。
    7.2.5 使用成功运行之后可以通过 http://localhost:5555/random 获取一个随机可用代理。
    可以用程序对接实现,下面的示例展示了获取代理并爬取网页的过程

    1. import requests
    2. proxypool_url = 'http://127.0.0.1:5555/random'
    3. target_url = 'http://httpbin.org/get'
    4. def get_random_proxy():
    5. """ get random proxy from proxypool :return: proxy """
    6. return requests.get(proxypool_url).text.strip()
    7. def crawl(url, proxy):
    8. """ use proxy to crawl page :param url: page url :param proxy: proxy, such as 8.8.8.8:8888 :return: html """
    9. proxies = {'http': 'http://' + proxy}
    10. return requests.get(url, proxies=proxies).text
    11. def main():
    12. """ main method, entry point :return: none """
    13. proxy = get_random_proxy()
    14. print('get random proxy', proxy)
    15. html = crawl(target_url, proxy)
    16. print(html)
    17. if __name__ == '__main__':
    18. main()

    运行结果如下:
    get random proxy 116.196.115.209:8080
    {
    “args”: {},
    “headers”: {
    “Accept”: “/“,
    “Accept-Encoding”: “gzip, deflate”,
    “Host”: “httpbin.org”,
    “User-Agent”: “python-requests/2.22.0”,
    “X-Amzn-Trace-Id”: “Root=1-5e4d7140-662d9053c0a2e513c7278364”
    },
    “origin”: “116.196.115.209”,
    “url”: “https://httpbin.org/get