python 爬虫之搭建代理ip池--测试代理ip可用性
有一个自己的代理ip池,并且经常去维护它的话,自身的ip就没那么容易被封掉,
下面是检测代理ip是否可用的方法,
原理是从我存入数据库的ip中提取出所有的ip逐个去检测,(访问一个稳定的网站,如果返回200就视为可用)
如果可用的话就保留,如果不可用就调用delete方法,从数据库中删除掉。
这就是筛选的方式,挺简单的,那么肯定会有人问,爬取的过程和这个步骤一起做了不行吗?
emm答案是肯定行的,因为我爬取西刺代理被封过一次ip,爬取速度太快了,所以我还是分步吧。
封一次ip又要等几天。很烦。。。。。。。。。。过几天在贴出爬取检测存储一部到位的吧
下面是代码部分,写的有点乱,仅供参考
import pymssql
import requests
import time
import os
# -*- coding: gb2312 -*- #
"""
测试之前爬取存到数据库的代理ip是否可用,可行。。
接着爬呀爬。
"""
headers={
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3722.400 QQBrowser/10.5.3751.400',
}
usr=pymssql.connect('KIRIN','sa','123','student',autocommit=True)
sql=usr.cursor()
# sql.execute('''delete from ip where ip=('60.167.135.229')''')
# 数据库删除ip方法
def delete(ip):
xx=usr.cursor()
xx.execute(f'''delete from ip where ip=('{ip}')''')
print(ip,'不可用,已移除')
def getip(): # 从数据库获取ip并进行拼接处理,给下面请求测试使用
sql.execute('select ip,port from ip')
aa = sql.fetchall()
ip = []
for xx in aa:
xxx = ':'.join(xx)
ip.append(xxx)
return ip
# ip请求外部方法
def put():
a=getip()
for x in a:
t={'http':'{}'.format(x)} # 接收到处理过的ip 下面发送请求
try:
req = requests.get('http://666cc.cn/blog/', headers=headers, proxies=t, timeout=3)
if req.status_code==200:
print('ip可用',x)
except Exception as e:
print(e)
xx=x.find(':')
delete(x[:xx])
put()
sql.close()