使用Python更换外网IP的方法


Posted in Python onJuly 09, 2018

在进行数据抓取时,经常会遇到IP被限制的情况,常见的解决方案是搭建代理IP池,或购买IP代理的服务。除此之外,还有一个另外的方法就是使用家里的宽带网络进行抓取。由于家里的宽带每次断开重新连接时都会分配一个新的IP,所以在我们抓取数据的时候,判断当IP被禁掉时,立即在路由器中进行断开重新连接操作。考虑到人工操作比较繁琐,另外也不可能一直盯着执行的程序,就考虑使用Python自动多路由器进行设置。

以下代码为针对家里的TP-Link进行的设置,其他路由器的设置原理也应该一样。

import base64, requests, time, re
 
base_url = 'http://192.168.1.1'
user = 'admin'
pwd = 'password'
 
headers = {
  'Accept': '*/*',
  'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)',
  'Referer': base_url + '/userRpm/StatusRpm.htm',
  'Cookie': 'Authorization=Basic ' + base64.b64encode((user + ':' + pwd).encode(encoding='utf-8')).decode(
    encoding='utf-8')
}
 
 
def get_ip():
  url = "http://2018.ip138.com/ic.asp"
  r = requests.get(url)
  txt = r.text
  ip = txt[txt.find("[") + 1: txt.find("]")]
  return ip
 
 
def get_ip_status():
  url = base_url + "/userRpm/StatusRpm.htm"
  r = requests.get(url=url, headers=headers)
  pattern = re.compile('(\d+\.\d+\.\d+\.\d+)')
  ip = re.findall(pattern,r.text)
  return ip[3]
 
 
def change_ip():
  url = base_url + '/userRpm/StatusRpm.htm?Disconnect=%B6%CF%20%CF%DF&wan=1'
  requests.get(url=url, headers=headers)
  while True:
    time.sleep(5)
    new_ip = get_ip_status()
    if new_ip != '0.0.0.0':
      break
 
if __name__ == "__main__":
  change_ip()

以上代码已经经过测试,能够正常使用。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用functools模块中的partial函数生成偏函数
Jul 02 Python
深入理解Python对Json的解析
Feb 14 Python
python之DataFrame实现excel合并单元格
Feb 22 Python
python3之模块psutil系统性能信息使用
May 30 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
python防止随意修改类属性的实现方法
Aug 21 Python
Python处理session的方法整理
Aug 29 Python
Python 炫技操作之合并字典的七种方法
Apr 10 Python
tensorflow pb to tflite 精度下降详解
May 25 Python
python3中数组逆序输出方法
Dec 01 Python
python库sklearn常用操作
Aug 23 Python
Python中request的基本使用解决乱码问题
Apr 12 Python
使用Python AIML搭建聊天机器人的方法示例
Jul 09 #Python
Python迭代器与生成器用法实例分析
Jul 09 #Python
numpy的文件存储.npy .npz 文件详解
Jul 09 #Python
Python实现聊天机器人的示例代码
Jul 09 #Python
Atom的python插件和常用插件说明
Jul 08 #Python
Python中pip更新和三方插件安装说明
Jul 08 #Python
python中sys.argv函数精简概括
Jul 08 #Python
You might like
php字符串函数学习之substr()
2015/03/27 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
修改发贴的编辑功能
2007/03/07 Javascript
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
JavaScript将一个数组插入到另一个数组的方法
2015/03/19 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
vue父子模板传值问题解决方法案例分析
2020/02/26 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
2020/05/14 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
matplotlib设置legend图例代码示例
2017/12/19 Python
python处理document文档保留原样式
2019/09/23 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
Django用户身份验证完成示例代码
2020/04/03 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
世界上最好的旅行夹克:BauBax
2018/12/23 全球购物
C语言50道问题
2014/10/23 面试题
投标邀请书范文
2014/01/31 职场文书
护士毕业自我鉴定
2014/02/07 职场文书
公司演讲稿开场白
2014/08/25 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
Java数据结构之链表相关知识总结
2021/06/18 Java/Android