美文网首页Scrapy
scrapy (IP代理)从数据库中取出ip判断是否可用

scrapy (IP代理)从数据库中取出ip判断是否可用

作者: 小白变黑记 | 来源:发表于2017-11-15 18:33 被阅读12次

    import pymysql

    import requests

    conn = pymysql.connect(host="localhost",user="root",passwd="root",db="leymax",charset="utf8")

    cursor = conn.cursor()

    classGetIp(object):

    # 删除无效ip

    defdelete_ip(self,ip):

        sql ="delete from xiciproxy where ip='{0}'".format(ip)# format() 格式化字符串

        cursor.execute(sql)

        conn.commit()

        return True



    # 判断ip是否可用

    defjudge_ip(self,type,ip,port):

        http_url ="http://www.baidu.com"

        proxy_url ="{0}://{1}:{2}".format(type,ip,port)

        print("url:"+ proxy_url)

        try:

            proxy_dict = {

                type: proxy_url, # type 为https 或者http 数据库存储的

            }

            response = requests.get(http_url,proxies=proxy_dict)

        exceptExceptionase:

            self.delete_ip(ip)

            print("invalid ip and port")

            return False

            code = response.status_code

            if code >=200 and code <300:

                print("effective ip")

                return True

        else:

            print("invalid ip and port")

            self.delete_ip(ip)

            return False



    defget_random_ip(self):# 从数据库中随机获取一个可用的ip

        random_sql ="""

            SELECT type, ip, port FROM xiciproxy

            ORDER BY RAND()

            LIMIT 1

        """

        result = cursor.execute(random_sql)

        for ip_info in cursor.fetchall():

            type = ip_info[0]

            ip = ip_info[1]

            port = ip_info[2]

            judge_re =self.judge_ip(type,ip,port)

            ifjudge_re:

            return"{0}://{1}:{2}".format(type,ip,port)

        else:

            return self.get_random_ip()

    if__name__ =="__main__":

    get_ip = GetIp()

    print(get_ip.get_random_ip())

    相关文章

      网友评论

        本文标题:scrapy (IP代理)从数据库中取出ip判断是否可用

        本文链接:https://www.haomeiwen.com/subject/cruhvxtx.html