源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

python 3.5实现检测路由器流量并写入txt的方法实例

  • 时间:2022-02-02 12:07 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:python 3.5实现检测路由器流量并写入txt的方法实例
[b]前言[/b] 本文主要给大家介绍了关于利用python 3.5检测路由器流量并写入txt的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍。 [b]环境交代:[/b]win10+python3.6 代码非常简单, [list] [*]模拟登陆,没有[/*] [*]网页标签过滤,没有[/*] [*]多线程,也没有[/*] [*]文本处理,只有涉及到字符串截取[/*] [*]本地文本写入,有[/*] [/list] 这么低级的代码是因为这个路由器页面非常垃圾,用不到~~~,不过这样也适合初学者观看,当然了,后续会尝试添加更多功能 首先我们对自己的需求要进行分析,新手嘛,先把复杂的东西简单化,模块化,整理出思路,再一步步的去实现,最后整合。 [b]1、获得数据[/b] [list] [*]网页编码,编码没有处理好会报错,涉及到一些函数[/*] [*]编码转换,read()方法获取到的非字符串类型,要预先进行处理[/*] [/list] [b]2、处理数据[/b] [list] [*]方法有很多,正则,字符串截取,等等不一一介绍,适合的才是最好的,我觉得正则是很强大的,但是也是相当反人类的[/*] [/list] [b]3、保存数据[/b] [list] [*]注意win下路径和linux下路径写法不同[/*] [*]写入的编码类型需要进行处理[/*] [/list] [b]重点讲一讲我遇到的坑[/b] 一般来讲右键查看页面编码,如图所示,因为在国外是非常奇怪的编码 [img]http://files.jb51.net/file_images/article/201712/20171217154531375.png?20171117154540[/img] 当时我就蒙蔽了,这是什么鬼~ 这个时候我们需要用到chardet库来判断编码类型,拿百度举例,自行百度python第三方库如何安装,这里不做阐述
import chardet
import urllib.request
html = urllib.request.urlopen('http://www.baidu.com/').read()
print (chardet.detect(html))
得到的结果如下:
C:\python\python.exe D:/python/test/2.py
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}

Process finished with exit code 0
[b]1.取得字符串[/b]
import urllib.request
import os
from bs4 import BeautifulSoup
import time
def getHtml(url):
 html = urllib.request.urlopen(url).read()
 return html
#获取字符串,因为我在国外,路由器low到爆,编码格式也蛋疼了我很久
html = getHtml("http://192.168.0.254/pub/fbx_info.txt")
#将read()获取的是bytes编码转化成str
html = html.decode("ISO-8859-1")
因为是欧洲网站,获取的却是一个 【ISO-8859-1】的网页编码。 由于这里我们用read()方法读取,获取到的是bytes类型,此时需要转换成str类型的,才可以进行下一步的处理,如果不处理就会有下列错误 [code]TypeError: a bytes-like object is required, not 'str'[/code] 这里可以使用decode()方法处理一下 [code]html = html.decode("ISO-8859-1")[/code] 使用type()方法检测下编码 [code]print(type(html))[/code] 反馈 [code]<class 'str'>[/code] [b]2.处理字符串[/b]
#操作字符串
html = html.split('WAN')[1].split('Ethernet')[0]
time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
#因为使用记事本,在记事本中换行只认\r\n
str = time+html+"\r\n"
这里我使用的是[url=http://www.1sucai.cn/article/63592.htm]split()[/url]方法,使用方法呢,推荐大家学会查手册,这里也不详细再解释了。 我通过split()方法截取到了自己需要的字符串,然后用[url=http://www.1sucai.cn/article/66603.htm]time()[/url]函数获取当前本地时间,然后用+连接符把当前本地时间和处理后的字符串连接起来,再在末尾接上换行符rn,因为懒到只用记事本,换行符这里只算一个小坑 [b]3.写入txt[/b]
# 保存文件为txt,win环境路径
outfile = open("C:\\Users\\sw\\Desktop\\route.txt","a+",encoding="utf-8",newline='\n')
outfile.write(str)
outfile.close()
print("文件已保存到本地")
关于open函数,每一个参数,此篇博文讲的非常清楚非常详细,感谢博主的整理,大家可以看看,建议收藏 [url=http://www.1sucai.cn/article/58002.htm]http://www.1sucai.cn/article/58002.htm[/url] 要强调的有2个参数 encoding和newline,因为用的比较少,然后很多文章并不会提到 有人可能会说,哇,真的懒 没错,我就是懒,而且再说了,写了还没人家写的好,那我何必误人子弟。 [b]下面贴上全部代码[/b]
import urllib.request
import os
from bs4 import BeautifulSoup
import time
def getHtml(url):
 html = urllib.request.urlopen(url).read()
 return html

#获取字符串,因为我在国外,路由器low到爆,编码格式也蛋疼了我很久
html = getHtml("http://192.168.0.254/pub/fbx_info.txt")
#将read()获取的是bytes编码转化成str
html = html.decode("ISO-8859-1")
#再次检测编码
#print(type(html))
#操作字符串
html = html.split('WAN')[1].split('Ethernet')[0]
time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
#因为使用记事本,在记事本中换行只认\r\n
str = time+html+"\r\n"
# 保存文件为txt,win环境路径
#print(type(str))
outfile = open("C:\\Users\\sw\\Desktop\\route.txt","a+",encoding="utf-8",newline='\n')
outfile.write(str)
outfile.close()
print("文件已保存到本地")
本来当初的想法是每秒获取一次流量,写入txt,再读txt,通过数据来绘图 但是有事暂时搁下了,只是win计划任务定时运行,勉强凑活用下日后再学习补充 [b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对编程素材网的支持。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部