Python采集代理ip并判断是否可用和定时更新的方法

作者:lilongsy 时间:2022-12-01 15:19:05 

网上有很多免费的ip地址,都是可以使用的,但是如果手动来获取太麻烦,这里通过Python自动抓取,可以批量获取。

代码如下:


# -*- 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)

来源:https://blog.csdn.net/lilongsy/article/details/76034209

标签:python,采集,代理ip,更新
0
投稿

猜你喜欢

  • MySQL中SQL命令语句条件查询实例详解

    2024-01-12 19:45:48
  • JS代码的格式化和压缩

    2007-10-17 21:17:00
  • Vue.js中v-bind指令的用法介绍

    2024-04-30 10:18:30
  • 基于MySql的扩展功能生成全局ID

    2024-01-13 07:52:58
  • python enumerate内置函数用法总结

    2023-06-24 05:54:24
  • javascript验证只能输入数字和一个小数点示例

    2024-04-22 22:29:11
  • Python进程间通信之共享内存详解

    2022-01-06 05:47:10
  • C#访问SQL Server数据库的实现方法

    2024-01-14 17:14:23
  • sql server海量数据库的查询优化及分页算法方案

    2010-07-02 21:17:00
  • 使用access数据库时可能用到的数据转换

    2008-09-10 12:49:00
  • Python字符串和文件操作常用函数分析

    2023-07-25 08:42:23
  • Ajax的错误处理机制探讨

    2007-09-07 09:53:00
  • python实现Decorator模式实例代码

    2022-05-10 06:04:56
  • 基于selenium及python实现下拉选项定位select

    2023-01-13 12:17:48
  • vue3动态路由刷新后空白或者404问题的解决

    2023-07-02 16:58:39
  • java连接Oracle数据库的方法解析

    2024-01-21 22:12:27
  • css分页放大镜效果

    2008-11-02 15:35:00
  • Innodb中mysql快速删除2T的大表方法示例

    2024-01-22 09:14:21
  • 注意:php5.4删除了session_unregister函数

    2023-11-24 12:31:54
  • 通过Fckeditor把图片上传到独立图片服务器的方法

    2023-11-06 20:02:24
  • asp之家 网络编程 m.aspxhome.com