代理使用过程中Keep-Alive保持IP不变

在使用爬虫代理的过程中,由于该产品是自动转发代理,按照每个http请求随机分配一个代理ip的模式进行转发,会导致多个Session的请求ip不一致,如果目标网站进行了判断会按照爬虫限制请求,尤其是一些反爬较多的网站,会出现大量的请求错误。
在使用过程中,通过为requests.session()进行对象锁定,能够让所有的Session保持相同的外网IP,从而快速进行数据采集。注意代理产品的IP有效时间,在代理IP到期之前,必须结束所有的请求,才能保证Session的完整性。另外需要分析目标网站的数据请求,如果需要可以在外网IP的同时,进行cookie的设置。以我最近的项目代理使用部分如下:

#! -- encoding:utf-8 --
import requests
import random
import requests.adapters

# 要访问的目标页面
targetUrlList = [
    "https://httpbin.org/ip",
    "https://httpbin.org/headers",
    "https://httpbin.org/user-agent",
]

# 代理服务器(产品官网 www.16yun.cn)
proxyHost = "t.16yun.cn"
proxyPort = "31111"

# 代理验证信息
proxyUser = "username"
proxyPass = "password"

proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
    "host": proxyHost,
    "port": proxyPort,
    "user": proxyUser,
    "pass": proxyPass,
}

# 设置 http和https访问都是用HTTP代理
proxies = {
    "http": proxyMeta,
    "https": proxyMeta,
}

# 访问三次网站,使用相同的Session(keep-alive),均能够保持相同的外网IP
s = requests.session()

# 设置cookie
# cookie_dict = {"JSESSION":"123456789"}
# cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)
# s.cookies = cookies

for i in range(3):
    for url in targetUrlList:
        r = s.get(url, proxies=proxies)
        print r.text
上一篇:[杂谈-随口一说]Keep learning!


下一篇:tcp keepalive与http keep-alive