利用Python处理WEB服务数据实例

首次体验用Python,有很多不适应的地方,时不时会和C#、PB等语言的语法混淆。作为数据处理工具,使用其你会不断有惊喜,有其它编程语言基础的情况下,上手比较快。

 

下面这个程序代码用了大概半天时间,其实要实现的功能很简单,原来有个页面的数据需要完整的展示到另外一个设备上,但分辨率和尺寸不符, 找原厂需要很多费用,不忍心发扬自力更生精神,自己动手丰衣足食。

分析原数据页面数据刷新机制,采用ajax技术推送数据。

可构造JSON以POST方式访问该服务。用postman模拟发送,成功获取数据。

展示页面使用HTML格式,定义模板,变量赋值后进行替换,最后输出文件保存。具体细节不再赘述,完整代码如下:

# -*- coding: utf-8 -*-
"""
  作者:aloxy
  日期:2019年10月10日
  版本:1.0
  #打包EXE: pyinstaller getsis.py -F -c
  #
"""
import json
import requests
import datetime
import os
import time


"""
    HTML文件模板
"""
class Template_mixin(object):
    """html文件"""
    HTML_TMPL = r"""
        <!DOCTYPE html>
        <html lang="zh-CN">
        <head>
            <meta charset="GB2312">
            <meta http-equiv="content-type" content="text/html; charset=GB2312">
            <meta name="renderer" content="webkit"/>
            <meta name="force-rendering" content="webkit"/>
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
            <meta HTTP-EQUIV="Pragma" content="no-cache">
            <meta HTTP-EQUIV="Cache-Control" content="no-cache">
            <meta HTTP-EQUIV="Expires" content="0">

            <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
            <meta name="apple-mobile-web-app-status-bar-style" content="black">
            <title>****环保指标</title>
            <link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
            <div align='center'><h1 style="font-weight: bold;font-size: 42px;font-family: Microsoft YaHei;color:#00FF00;text-shadow: 1px 1px 1px #FFFFFF;letter-spacing:8px"><br>****公司环保指标<br></h1></div>
            <div align='right' style="padding-right:150px;color:#FFFFFF;font-weight: bold;font-size: 24px;"><p class='attribute'><strong>%(value)s</strong></p></div>
            <style type="text/css" media="screen">
            body  { font-family: Microsoft YaHei,Tahoma,arial,helvetica,sans-serif;padding: 10px;color:#FFFFFF}
            table {
                    border-collapse: collapse;
                  }

            table, td, th {
                    border: 1px solid #FFFFFF;
                    vertical-align: middle;
                    text-align: center;
                  }
        </style>
        </head>
        <body style="margin: 0px; border: 0px dotted red; border-image: none; background-color: rgb(0, 0, 255);">
            <table id='result_table' class="table;table-layout:fixed;" width="1200" height="586">
                
                <tr align='center' valign='middle'  style="font-weight: bold;font-size: 24px;" height="41">
                    <th style="vertical-align: middle;text-align: center;width:300"  rowspan=2><div>排放指标</div></th>
                    <th colspan=2 style="vertical-align: middle;text-align: center;width:222" >1号机组</th>
                    <th colspan=2 style="vertical-align: middle;text-align: center;width:222" >2号机组</th>
                    <th colspan=2 style="vertical-align: middle;text-align: center;width:222" >3号机组</th>
                    <th colspan=2 style="vertical-align: middle;text-align: center;width:222" >4号机组</th>
                </tr>
                
                <tr style="font-weight: bold;font-size: 24px;"  height="41">
                    <td style="vertical-align: middle;text-align: center;width:111">实时值</td>
                    <td style="vertical-align: middle;text-align: center;width:111">标准值</td>
                    <td style="vertical-align: middle;text-align: center;width:111">实时值</td>
                    <td style="vertical-align: middle;text-align: center;width:111">标准值</td>
                    <td style="vertical-align: middle;text-align: center;width:111">实时值</td>
                    <td style="vertical-align: middle;text-align: center;width:111">标准值</td>
                    <td style="vertical-align: middle;text-align: center;width:111">实时值</td>
                    <td style="vertical-align: middle;text-align: center;width:111">标准值</td>
                </tr>
                %(table_tr)s
               
            </table>
            <script language="JavaScript"> 
            function myrefresh(){ 
                window.location.reload(); 
            } 
            setTimeout('myrefresh()',5000); //指定5秒刷新一次 
            </script> 
        </body>
        </html>"""
 
    TABLE_TMPL = """
       <tr align='center' valign='middle' style="vertical-align: middle;text-align: center;font-weight: bold;font-size: 24px;"  height="41">
                    <td style="vertical-align: middle;text-align: center;width:300">机组负荷(MW)</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_1)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">320</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_2)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">320</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_3)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">300</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_4)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">300</td>
                </tr>
                 <tr align='center' valign='middle' style="vertical-align: middle;text-align: center;font-weight: bold;font-size: 24px;"  height="41">
                    <td style="vertical-align: middle;text-align: center;width:300">二氧化硫(mg/m<sup>3</sup>)</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_5)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">200</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_6)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">200</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_7)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">200</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_8)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">200</td>
                </tr>
                <tr align='center' valign='middle' style="vertical-align: middle;text-align: center;font-weight: bold;font-size: 24px;"  height="41">
                    <td style="vertical-align: middle;text-align: center;width:300">氮氧化物(mg/m<sup>3</sup>)</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_9)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">200</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_10)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">200</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_11)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">200</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_12)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">200</td>
                </tr>
                <tr align='center' valign='middle' style="vertical-align: middle;text-align: center;font-weight: bold;font-size: 24px;"  height="41">
                    <td style="vertical-align: middle;text-align: center;width:300">粉尘(mg/m<sup>3</sup>)</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_13)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">30</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_14)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">30</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_15)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">30</td>
                    <td style="vertical-align: middle;text-align: center;width:111">%(hb_16)s</td>
                    <td style="vertical-align: middle;text-align: center;width:111">30</td>
        </tr>"""

"""
    构造POST请求头,访问WEB服务获取数据
"""  
def get_html_text(url):    
    values_json ={"p": "0"}
    headers ={
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "X-Requested-With": "XMLHttpRequest",
    "Host": "1.1.1.89:8888",
    #"Referer": "http://1.1.1.89:8888/",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko",
    "content-type":"application/json"
    }
    r = requests.post(url,timeout=30, headers = headers,data = json.dumps(values_json).encode("utf-8"))
    return r.text
    
"""
    处理从WEB服务获取的数据
"""    
def gethtml():
    html = Template_mixin()
    #获取服务器数据
    url_get = 'http://1.1.1.89:8888/abc.asmx/get_data'
    text = get_html_text(url_get)
    
    #将获取的字符串转换为数组
    text = text.replace("[","").replace("]","").replace("}","")     
    newtxt =[]
    newtxt = str.split(text[6:len(text) - 1],",")
    
    #填充页面数据单元格   
    table_td  = html.TABLE_TMPL % dict(hb_1 = newtxt[0],hb_2 = newtxt[1],hb_3 = newtxt[2]
    ,hb_4 = newtxt[3],hb_5 = newtxt[4],hb_6 = newtxt[5],
    hb_7 = newtxt[6],hb_8 = newtxt[7],hb_9 = newtxt[8],
    hb_10 = newtxt[9],hb_11 = newtxt[10],hb_12 = newtxt[11],
    hb_13 = newtxt[12],hb_14 = newtxt[13],hb_15 = newtxt[14],hb_16 = newtxt[15])
    #获得当前时间
    now = datetime.datetime.now()  #这是时间数组格式
    #转换为指定的格式:
    #otherStyleTime = now.strftime("%F") # %H:%M:%S
    otherStyleTimes = now.strftime("%Y/%m/%d  %H:%M:%S") # %H:%M:%S
    years = '年'
    months = '月'
    days = '日'
    otherStyleTime = str(now.year) + years + str(now.month) + months + str(now.day) + days
    output = html.HTML_TMPL % dict(value = otherStyleTime,table_tr = table_td,)

    # 生成页面html代码
    file_names = "hbzb.htm"
    
    #获取路径,写本地HTML文件
    filepath = os.path.join(os.path.split(os.path.realpath(__file__))[0],'report')
    if os.path.exists(filepath) == False:
        os.mkdir(filepath)
    filename = os.path.join(filepath,file_names)
    if os.path.exists(filename) == False:
        open(filename,"x")
    f = open(filename,"w")
    f.write(output)
    f.close()
    
    
    print("系统信息:",otherStyleTimes,"数据已成功写入,hbzb.htm.")
    
"""
    主函数
"""
def main():    
    #无限次循环,按Ctrl + C退出运行
    while True:
        gethtml()
        time.sleep(5)
    
if __name__ == '__main__':
    main()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值