Python爬取神鸡免费代理ip(二)

2019年5月11日 16:45

253

2 从数据库中取出有效代理IP并格式化好

我们先定义一个类,方便后面导入获取可用的代理IP

class GetIp(object):

首先我们先定义一个方法判断代理IP是否可用,具体方法就是通过测试百度的服务器判断 状态码 是否在200到300之间

def judge_ip(self, ip, port, proxy_type):

"""

判断是否有效

:param ip:

:param port:

:param proxy_type:

:return: bool

"""

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

proxy_ip = "://:".format(proxy_type, ip, port)

try:

proxy_dict = {

proxy_type: proxy_ip

}

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

except Exception as e:

print("invalid ip and port", ip, port, proxy_type, e)

self.del_ip(ip)

return False

else:

code = response.status_code

if 200

print("有效", ip, port, proxy_type)

return True

else:

self.del_ip(ip)

return False

删除无效的代理IP

def del_ip(self, ip):

"""删除无效ip"""

sql = """delete from ip_info WHERE ip='{}'""".format(ip)

执行

cus.execute(sql)

提交

conn.commit()

随机获取一个代理IP,获取时先判断是否能用,不能则删除,继续随机获取,直到获取成功

def get_random_ip(self):

"""

获取随机ip

:return: (ip, port, proxy_type)

"""

sql = """select ip,port,proxy_type from ip_info order by RAND() limit 1;"""

cus.execute(sql)

for ip_info in cus.fetchall():

ip = ip_info[0]

port = ip_info[1]

proxy_type = ip_info[2]

if self.judge_ip(ip, port, proxy_type):

print("有效的ip")
return ip, port, proxy_type

return "://:".format(proxy_type, ip, port)

else:

print("再次尝试!")
time.sleep(1)

self.get_random_ip()

最后我们可以测试一下
一, 先用crawl_ips()方法抓取代理IP,前提是首先见好了数据库,连接好了表

if name == ' main ':

crawl_ips() # 先单独调用此函数 爬取代理ip 然后注释掉 测试提取出代理ip
二, 在把 crawl_ips()注释,实例化一个对象来获取一个可用的随机代理IP

test_net = GetIp()

ip = test_net.get_random_ip()

print(ip)

效果图:如下

5.jpeg

调用函数 效果图

总结,这段脚本了,有两个看点吧,一是如何爬取代理IP,我使用了Scrapy框架里面的选择器来进行提取数据,二就是如何判断一个能用的代理IP,用百度这个网址去测试是否可用。


相关文章

访客统计

总共接待456223名访客

今日访客2051


@ 2016 - 2018.神鸡IP代理,
All rights reserved.
鄂ICP备18017015号-4

禁止利用本站资源从事任何违反本国(地区)法律法规的活动
神鸡代理ip专业提供http代理ip地址,动态ip代理服务器实时更新