Python自动抓取代理IP并验证可用性的实现方案
本文介绍使用Python自动从网站批量抓取免费代理IP,并通过Socket连接验证其可用性的方法。代码包含IP抓取、有效性判断及本地JSON存储逻辑,支持定时更新以维持IP池的有效性,适合需要稳定代理资源的开发场景。
互联网上存在大量免费可用的IP地址,但手动逐一获取效率极低。通过Python脚本进行自动化抓取,可以实现批量获取代理IP的目标。
具体实现代码如下:
# -*- coding: utf-8 -*-
import re
import urllib2
import json
import os
import time
import socket
class ProxyIp(object):
def __init__(self):
self.path = os.path.split(os.path.realpath(__file__))[0]
# Get latest proxy ip and download to json
def update_ip(self):
print 'Update Ip'
url = 'http://www.ip3366.net/free/'
req = urllib2.Request(url)
response = urllib2.urlopen(req)
matches = re.findall(
ur'(\d+.\d+.\d+.\d+)</td>\s+<td>(\d+)</td>\s+<td>.*?</td>\s+<td>(HTTPS?)</td>',
response.read(),
re.I
)
ls = []
for match in matches:
if self.is_open(match[0], match[1]):
ls.append({'ip':match[0], 'port':match[1], 'protocol': match[2]})
with open('%s/ip.json' % self.path, 'w') as f:
json.dump(ls, f)
return ls
# whether the ips is last or old.
def is_last(self):
m_time = int(os.path.getmtime('%s/ip.json' % self.path))
now_time = int(time.time())
return (now_time - m_time) > 60*60*4 # 4 hours
@staticmethod
def is_open(ip, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect(ip, int(port))
return True
except:
print 'Faild IP: %s:%s' % (ip, port)
return False
def get_proxy_ips(self):
if not self.is_last():
return self.update_ip()
else:
with open('%s/ip.json' % self.path, 'r') as f:
return json.load(f)
以上介绍了Python采集代理IP、判断其可用性以及定时更新的完整方法,供读者参考。如有需要,请支持相关技术分享平台。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













