作者:IPIDEA
2022-09-28 11:29:04
通过搜索引擎找到免费ip代理网站,我们爬完之后需要对这些IP测试。因为免费ip代理的可用性相对较低,它是开放的,所以它需要经过以下步骤才能筛选出有用的IP来。
1.ip代理验证
由于免费的ip许多代理商不能使用,或不稳定,或时间短。因此,验证ip代理是否可用是非常必要的。主要验证原理:使用ip代理访问网页,判断能否正常访问。我在这里选择的网站是“站长之家”,本网站可直接返回您当前使用的网站ip以及ip所在地。这里需要注意的是,如果访问时间超过一定时间,可以在访问前设置连接超时时间,直接跳过这个ip代理。建议设置在2秒内,具体可见以下函数:
def ip_test(ip_proxies):
"""
验证单个ip代理是否可用
:param ip_proxies: 待验证ip,例如:101.96.10.36:88
:return:
"""
url = "http://ip.chinaz.com/"
headers = {
"Host": "ip.chinaz.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Accept-Encoding": "gzip, deflate",
"Referer": "https://blog.csdn.net/Winterto1990/article/details/51220307",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"Cache-Control": "max-age=0",
}
proxies = {"http": "http://" + ip_proxies, } # 设置代理
res = requests.get(url, headers=headers, proxies=proxies, timeout=1) # timeout为设定的相应时长,建议在2秒内
# 解析网页
soup = BeautifulSoup(res.text, "html.parser")
info_list = soup.find_all("p", {"class": "getlist pl10"})
for info in info_list:
is_local = info.get_text()
print(info.get_text())
return is_local.find("XXX.XXX.XXX.XXX") # 判断是否为本地的地址
2、防止账号关联验证ip代理
要防止账号关联的对ip代理进行验证,实际上这就是调用上一步中验证ip代理中的程序。具体程序如下:
def ip_batch_inspection(read_path, save_path):
"""
验证多个ip代理是否可用
:param read_path: ip代理文件路径
:param save_path: 验证可用的ip代理保存路径
:return:
"""
with open(read_path, "r") as fr:
lines = fr.readlines()
fr.close()
count = 0
file_name = read_path.split("/")
print(file_name[-1] + "文件共有 " + str(len(lines)) + " 条数据")
for line in lines:
count += 1
ip_proxies = line.replace(" ", "")
try:
is_local = ip_test(ip_proxies) # 如果是本地ip,返回值为大于0数值
if is_local < 0:
with open(save_path, "a") as fs:
fs.write(ip_proxies + " ")
except Exception as e:
pass
# print("ip不可用")
print("验证中......%.2f%%" % (count/len(lines)*100))
print("验证完毕")
完成上面两步之后,就完成了免费代理IP使用前的准备了,可以放到ip代理池,等到之后需要时候再调用。