使用Python制作简单的小程序IP查看器功能


Posted in Python onApril 16, 2019

前言

说实话,查看电脑的IP,也挺无聊的,但是够简单,所以就从这里开始吧。IP地址在操作系统里就可以直接查看。但是除了IP地址,我们也想通过IP获取地理地址和网络运营商情况。IP地址和地理地址并没有固定的关系,所以我们需要借助网络上的数据库,或者说借助第三方的服务来查询。这里,我们选用IP.CN提供的IP地址查询服务。

基本环境配置

版本:Python3
系统:Windows
相关模块:PyQt5

实现效果图

使用Python制作简单的小程序IP查看器功能

完整代码

使用Python制作简单的小程序IP查看器功能

运行以上程序,点击按钮,大约卡顿半秒后,文本标签处就会显示我们电脑的IP地址、地理地址和ISP信息。
这个程序涉及到了不少新的知识点,我来依次解释一下:

def 函数名(...参数):这种语法是用来定义函数的。Lambda表达式定义的是匿名函数,def定义的是有名字的函数。函数接受0个或多个输入,处理后返回0个或多个输出。

冒号之后的下一行开始是函数体。函数体左边的四个空格不能省略。Python为了简洁,没有提供特殊的符号来给函数定界。Python用Tab(制表符)或空格来给函数定界。Tab在不同平台下宽度可能不一样,所以程序代码中的空白一般用空格。理论上任意个空格都可以,但使用4个空格已经是事实上的标准了。

函数名称里面执行的逻辑,不一定要跟函数名有关系。在函数体里头,可以执行我们想执行的任意逻辑。

函数体可以什么都不做。但是Python规定函数体不能为空。所以,表示什么都不做,要用语句pass
函数体通过return关键字结束执行,并将return后边跟着的数据(如果有的话)返回。没有返回语句的函数,会执行到函数尾部,返回None用来导入模块的import语句,除了放在代码头部外,也可以用在函数体里面。但是出了这个函数,import进来的东西就访问不到了Python是一种脚本语言,意思是Python代码会从头到尾一行一行地顺序执行。所以,用到的模块要提前导入,用到的函数要提前定义使用Python代码也可以访问网页。Python内置的urllib模块提供了这个功能。

URL就是我们通常说的网址。常见的网址可能使用http协议,也可能使用https协议。所以,在代码中,我们要明确指出
urlopen函数可以将网页下载回来。不同的网页,下载回来的格式也不一样。可能是普通的HTML网页(最常见的网页类型),可能是纯文本文档(在Windows下俗称记事本文档),也可能是图片、视频、压缩包等电脑上可以存储的任意文件格式。

urlopen函数下载网页消耗的时间是不确定的。Python代码要一行一行执行,下载网页时,程序要等待下载完成才能执行其他代码(包括响应用户的点击事件)。所以,下载时会导致软件假死,点击按钮没反应。

Python语言经常被用来做爬虫(用来自动化批量下载网页),而urllib是Python官方的可以做爬虫的模块。所以,直接使用urllib,会被ip.cn识别为爬虫而拒绝服务(返回HTTP状态码403)。所以,我们需要将我们的HTTP请求伪装成浏览器或者其他用户代理(User-Agent, 一般用户不会直接使用HTTP协议访问网页,而要借助浏览器代为访问,浏览器代理用户访问网页,这时浏览器的角色就是用户代理)。不过,我们这次不伪装成浏览器,而要伪装成cURL(可以当作一个命令行下的网页浏览器)。因为IP.CN对浏览器返回的是一个HTML网页,对cURL返回的是一个包含了IP信息的字符串。为了省却解析HTML网页获取我们关心的IP信息,我们决定伪装成cURL,一步到位获取。

要伪装成cURL,我们需要修改HTTP请求的头部Header。HTTP规范定义了HTTP头部的User-Agent字段表示用户代理。我们修改这个字段即可。经过我的测试,IP.CN对cURL的识别策略是User-Agent字段以curl开头,后面跟斜杠和curl版本号。我们用curl/7就行。

urllib.request.urlopen返回的数据类型是urllib.response.Response对象,这是urllib对HTTP响应的封装。Response.read()方法可以读取响应内容。由于HTTP响应可能是张图片,所以不能用字符串来表示。read方法读到的是字节码,字节码可以表示任何数据类型,也可以表示任何文件类型。从字节码转换到字符串,需要解码,即调用decode()方法。这张,我们便得到了一个表示IP地址信息的字符串,格式类似于当前 IP: 115.171.212.227 来自: 北京市 电信 。

字符串调用strip()方法可以去除首位的空白字符,比如换行符号。

字符串调用replace()方法,可以替换字符串中的指定子串为其他文本。我们用replace()方法来给字符串中间添加一个换行符。

控件的文本、对齐方式等属性也可以通过样式表来设置,比如qproperty-text表示文本,qproperty-alignment表示对齐方式。

Qt的样式表(QSS, Qt Style Sheet)中,*是通配符,表示任意控件。

QSS中,:hover表示鼠标悬浮状态,:pressed表示鼠标按下状态。

除了QBoxLayout.addWidget()方法,我们还可以通过QBoxLayout.setStretch(索引,比重)来调节子控件在布局中的拉伸因子。

总结

以上所述是小编给大家介绍的使用Python制作简单的小程序IP查看器功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python实现爬取逐浪小说的方法
Jul 07 Python
python分割列表(list)的方法示例
May 07 Python
python 多维切片之冒号和三个点的用法介绍
Apr 19 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 Python
解决django 新增加用户信息出现错误的问题
Jul 28 Python
python元组和字典的内建函数实例详解
Oct 22 Python
使用pandas 将DataFrame转化成dict
Dec 10 Python
Python xlrd excel文件操作代码实例
Mar 10 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 Python
使用Python爬取Json数据的示例代码
Dec 07 Python
Python破解极验滑动验证码详细步骤
May 21 Python
Python使用POP3和SMTP协议收发邮件的示例代码
Apr 16 #Python
Python这样操作能存储100多万行的xlsx文件
Apr 16 #Python
Python字符串内置函数功能与用法总结
Apr 16 #Python
python3实现字符串操作的实例代码
Apr 16 #Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
Apr 16 #Python
Django之无名分组和有名分组的实现
Apr 16 #Python
Pythony运维入门之Socket网络编程详解
Apr 15 #Python
You might like
如何开发一个虚拟域名系统
2006/10/09 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
基于jquery & json的省市区联动代码
2012/06/26 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
js 作用域和变量详解
2017/02/16 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
树莓派采用socket方式文件传输(python)
2019/06/22 Python
python实现滑雪游戏
2020/02/22 Python
python selenium操作cookie的实现
2020/03/18 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
世界最大的票务市场:viagogo
2017/02/16 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
大学生最常用的自我评价
2013/12/07 职场文书
奶茶专卖店创业计划书
2014/01/18 职场文书
迎元旦广播稿
2014/02/22 职场文书
农村葬礼主持词
2014/03/31 职场文书
合作意向协议书范本
2014/03/31 职场文书
高一新生军训方案
2014/05/12 职场文书
摘录式读书笔记
2015/07/01 职场文书
2016银行求职自荐信
2016/01/28 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫
Django框架中视图的用法
2022/06/10 Python