0
点赞
收藏
分享

微信扫一扫

python使用Keep-Alive保持相同代理IP进行采集,并进行状态判断,失败后重新发起

#! -- encoding:utf-8 -- import requests import requests.adapters import time # 导入time模块,用于等待

#要访问的目标页面

targetUrlList = [ “https://httpbin.org/ip”, “https://httpbin.org/headers”, “https://httpbin.org/user-agent”, ]


#代理服务器(产品官网 www.16yun.cn)

proxyHost = “t.16yun.cn” proxyPort = “31111”


#代理验证信息

proxyUser = “16yun” proxyPass = “16ip” proxyMeta = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"


#设置 http和https访问都是用HTTP代理

proxies = { “http”: proxyMeta, “https”: proxyMeta, }


#设置代理和重试策略

adapter = requests.adapters.HTTPAdapter( proxy=proxies, max_retries=3 )


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

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


# 为session设置代理和重试策略

s.mount("http://", adapter)

s.mount("https://", adapter)


for i in range(3):

   for j, url in enumerate(targetUrlList):

       r = s.get(url)

       # 判断状态码是否为200,如果不是,等待1秒后重试

       while r.status_code != 200: # 添加循环条件

           print(f"第{i+1}次访问第{j+1}个网站的状态码为{r.status_code},等待1秒后重试")

           time.sleep(1) # 等待1秒

           r = s.get(url) # 重新发起请求

       print(f"第{i+1}次访问第{j+1}个网站的结果:")

       print(r.text)

举报

相关推荐

0 条评论