? ?有一个功能需求,每天在仙人掌上爬取昨天一整天的流量图,并将流量图上的最小值,最大值,平均流量做成表格,用邮件发出。(python2.7.5)
? ? 1,需要使用的模块
<代码> # !/usr/bin/env python # - * -编码:utf - 8 - * 导入时间、datetime cookielib,请求,系统,再保险公司urllib2, urllib,插座,csv, heapq 进口smtplib 进口mimetype 导入的时间 从email.mime。文本导入MIMEText 从email.mime。多部分进口MIMEMultipart 从email.mime。基地进口MIMEBase 从电子邮件进口编码器 从电子邮件。MIMEImage进口MIMEImage default_encoding=皍tf - 8” 如果sys.getdefaultencoding () !=default_encoding: 重载(sys) 代码>
? ? 2,登陆仙人掌的函数
<代码> def Login1 (): socket.setdefaulttimeout (10) 全球头 头={} cj=cookielib.CookieJar () 全球第一 刀=urllib2.build_opener (urllib2.HTTPCookieProcessor (cj)) #仙人掌使用的账号密码 data=https://www.yisu.com/zixun/urllib.urlencode({“行动”:“登录”、“login_username”:“管理”、“login_password”:“123456 '}) #打开仙人掌主页 页面=urllib2.Request (" http://100.0.102.3/index。php”,数据,标题) #爬取页面数据 html=opener.open(页面).read () #如果页面数据中有graph_settings.php链接,说明登陆成功(返回1),反之登陆失败(返回0) 如果re.findall (“graph_settings.php”, html): 返回1 其他: 返回0 代码>
? ? 3,再定义几个需要用到的函数
<代码> #日期转换为时间戳(仙人掌的图片网址需要指定开始和结束时间) def datetime_timestamp (dt): 时间。strptime (dt, ' % Y - % m - H % d %: % m: % S ') s=time.mktime(时间。strptime (dt, ' % Y - % m - H % d %: % m: % S ')) 返回int(年代) #将一些换算成Gbit/每秒兆比特/比特(各级相差1000倍,保留2位小数) def托比特书(x): 如果x>=1000000000: 返回str(圆(x/1000000000, 2)) +‘G’ elif x>=1000000: 返回str(圆(x/1000000, 2)) +“M” elif x>=1000: 返回str(圆(x/1000, 2)) +“K” 其他: 返回str(圆(x, 2)) 代码>
? ?4、开始抓取图片和csv(如下图,图片右边的蓝色下载箭头就是csv)。
<代码>试题: #如果登陆成功 如果Login1 ()==1: #流量图的开始时间,昨天的就是 start_time=str (datetime_timestamp ((datetime.datetime.today () -datetime.timedelta(天=1)。strftime (Y ' % - % - % d就是'))) #流量图的结束时间,今天的就是 end_time=str (datetime_timestamp (datetime.datetime.today ()。strftime (Y ' % - % - % d就是'))) #昨天一整天的流量图网址(2687是图片id) url1=" http://100.0.102.3/graph_image.php?action=zoom& local_graph_id=2687, rra_id=0, view_type=, graph_start=" + start_time + "和graph_end=" + end_time #下载图片,保存到本地=urllib2请求。请求(url1、没有头) res=opener.open(请求).read () 开放(f=2687.“/myftpdir/png”,“世界银行”) f.write (res) f.close () #下载图片对应的csv(用于读取最大值、最小值等数值) url2=" http://100.0.102.3/graph_xport.php?local_graph_id=2687& rra_id=0, view_type=, graph_start=" + start_time + "和graph_end=" + end_time=urllib2请求。请求(url2、没有头) res=opener.open(请求).read () f=open (“/myftpdir/2687. csv”,“世界银行”) f.write (res) f.close () #读取这个csv文件 开放(f=2687./myftpdir csv, rb) 读者=csv.reader (f) # csv保存了5分每钟的平均上传(出站)和下载(入站)速率(共288行),生成2个列表来存储所有的上传速率和下载速率 发边线球的=[] 禁止击球区=[] n=0 一行的读者: #该表格的第11行到298行是速率 如果n>=10 n<=297: #如果数据显示南,则表示仙人掌当时获取数据失败,这种情况不做存储 # csv第1列是时间,第2列是入站、第3列是出站 如果行[1]!=癗aN”: inbounds.append(浮动(行[1])) 如果行[2]!=癗aN”: outbounds.append(浮动(行[2])) n +=1 #入站平均速率=发边线球的列表的所有速率总和/列表长度(就是存储的速率个数),并换算单位 inbound_ave1=托比特书(浮动(减少(λx, y: x + y,发边线球的)/len(发边线球的))) #发边线球的列表的最小值 发边线球的inbound_min1=托比特书(heapq.nsmallest (1) [0]) #发边线球的列表的最大值 发边线球的inbound_max1=托比特书(heapq.nlargest (1) [0]) #同样方法计算出站的平均速率,最大速率,最小速率 outbound_min1=托比特书(heapq.nsmallest(1,禁止击球区)[0]) outbound_max1=托比特书(heapq.nlargest(1,禁止击球区)[0]) outbound_ave1=托比特书(浮动(减少(λx, y: x + y,禁止击球区)/len(禁止击球区)))python抓取仙人掌的流量图