使用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学习笔记:字典的使用示例详解
Jun 13 Python
让 python 命令行也可以自动补全
Nov 30 Python
深入理解Python分布式爬虫原理
Nov 23 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
解决Python requests库编码 socks5代理的问题
May 07 Python
Python下使用Scrapy爬取网页内容的实例
May 21 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
Python基于pandas实现json格式转换成dataframe的方法
Jun 22 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 Python
python 获取一个值在某个区间的指定倍数的值方法
Nov 12 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
Mar 09 Python
python开发的自动化运维工具ansible详解
Aug 07 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 获取一个月第一天与最后一天的代码
2010/05/16 PHP
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
php+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
javascript与CSS复习(三)
2010/06/29 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
2016/05/09 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
暇步士官网:Hush Puppies
2016/09/22 全球购物
火山动力Java笔试题
2014/06/26 面试题
中职毕业生自我鉴定范文(3篇)
2014/09/28 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
表扬稿范文
2015/01/17 职场文书
小学语文复习计划
2015/01/19 职场文书
校本研修个人总结
2015/02/28 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
2016继续教育研修日志
2015/11/13 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
Python竟然能剪辑视频
2021/05/25 Python