python抓取仙人掌的流量图

  

? ?有一个功能需求,每天在仙人掌上爬取昨天一整天的流量图,并将流量图上的最小值,最大值,平均流量做成表格,用邮件发出。(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)。
 python抓取仙人掌的流量图”> <br/> <img src=

  
 <代码>试题:
  #如果登陆成功
  如果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抓取仙人掌的流量图