python 爬虫之搭建代理ip池–测试代理ip可用性

2020-05-09 15:28:01 浏览数 (1)

代码语言:javascript复制
有一个自己的代理ip池,并且经常去维护它的话,自身的ip就没那么容易被封掉,
代码语言:javascript复制
下面是检测代理ip是否可用的方法,
代码语言:javascript复制
原理是从我存入数据库的ip中提取出所有的ip逐个去检测,(访问一个稳定的网站,如果返回200就视为可用)
代码语言:javascript复制
如果可用的话就保留,如果不可用就调用delete方法,从数据库中删除掉。
代码语言:javascript复制
这就是筛选的方式,挺简单的,那么肯定会有人问,爬取的过程和这个步骤一起做了不行吗?
代码语言:javascript复制
emm答案是肯定行的,因为我爬取西刺代理被封过一次ip,爬取速度太快了,所以我还是分步吧。
代码语言:javascript复制
封一次ip又要等几天。很烦。。。。。。。。。。过几天在贴出爬取检测存储一部到位的吧
代码语言:javascript复制
下面是代码部分,写的有点乱,仅供参考
代码语言:javascript复制
代码语言:javascript复制
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()

0 人点赞