前后端python简单模拟api接口返回json,以及采集数据

1.先编写一个socket服务端模拟web前端,并发布json数据:

import socket
server=socket.socket()
ip_port=('127.0.0.1',8005)
server.bind(ip_port)

server.listen()

while 1:
    conn,addr = server.accept()

    while 1:
        try:
            from_client_msg = conn.recv(1024).decode('utf-8')
            print("来自客户端的消息",from_client_msg)
            message = b'HTTP/1.1 200 ok\r\n\r\n'
            conn.send(message)
            with open('2.html','r',encoding='utf-8') as f:
                data = f.read()
            conn.send(data.encode('utf-8'))
            conn.close()
        except Exception:
            break

2.html文件写入实现准备好的json,当然只是模拟,真正是从数据库读取的数据生成json文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{"code":200,"data":[{"datatime":"2022-01-01 20:00:00","uploadtime":"2022-01-01 20:25:05","value_2473":37,"value_2481":-77.8,"value_2483":0.9,"value_2484":26,"value_4402":0.009,"value_4404":0.8,"value_4405":0.012,"value_4406":-99,"value_4407":-99,"value_4467":0.059,"value_4468":0.071,"value_4471":0.016,"value_4D71":0.022,"value_4472":-99,"value_4474":-99,"value_4482":1017.4,"value_4485":-99,"value_4486":0.101,"value_4487":-99,"value_4488":-99,"value_4489":-99,"value_448A":0.053,"value_448B":-99,"status_2473":0,"status_2481":0,"status_2483":0,"status_2484":0,"status_4402":0,"status_4404":0,"status_4405":0,"status_4406":5,"status_4407":5,"status_4467":0,"status_4468":0,"status_4471":0,"status_4D71":0,"status_4472":5,"status_4474":5,"status_4482":0,"status_4485":5,"status_4486":0,"status_4487":5,"status_4488":5,"status_4489":5,"status_448A":0,"status_448B":5,"level":2,"levelName":"良","typeName":"二级","primaryPollutant":"PM10","overlimitPollutant":"","iaqi_4402":3,"iaqi_4404":8,"iaqi_4467":30,"iaqi_4471":5,"iaqi_4D71":-99,"iaqi_4486":76,"iaqi_448A":73,"aqi":76,"code":130100,"name":"石家庄市","cityname":"石家庄市","provinceName":"河北省"}],"message":"OK"}
</body>
</html>

前台访问一下:
在这里插入图片描述
编写获取json程序:

import requests
from lxml import etree

url = 'http://127.0.0.1:8005/'

response = requests.get(url)
response.encoding = 'utf-8'

page_text = response.text
text = etree.HTML(page_text)
div_list = text.xpath('/html/body/text()')
print(div_list[0].strip())

如下:
在这里插入图片描述
这样获取到的是一个json的类型,需要把它转换成python对象类型;并且加入我需要获取里面的datatime、uploadtime、name这三个字段的数据,改进上面的代码:

import requests
from lxml import etree
import json

def get_data():
    url = 'http://127.0.0.1:8005/'

    response = requests.get(url)
    response.encoding = 'utf-8'

    page_text = response.text
    text = etree.HTML(page_text)
    div_list = text.xpath('/html/body/text()')
    msg = div_list[0].strip()
    msg_json = json.loads(msg)   #loads直接转换成python对象
    code = msg_json["code"]
    if code == 200:
        data = msg_json['data']   #获取数据列表
        datatime= data[0]['datatime']
        uploadtime = data[0]['uploadtime']
        name = data[0]['name']
    else:
        with open('./data_error.log','a',encoding='utf-8') as f:
            f.write(f"数据获取错误,状态码为{code}\n")

if __name__ == '__main__':
    get_data()

数据入库:

def put_data(data):
    db = pymysql.connect(
        host = '192.168.247.100',
        port = 3306,
        user = 'root',
        password = '123457',
        database = 'test',
        charset = 'utf8'
    )
    _values = (
        (data[0]['datatime'],data[0]['uploadtime'],data[0]['name'])
    )
    cursor = db.cursor()
    # 建表语句
    # sql = "create table json_data(id int primary key AUTO_INCREMENT,data datetime,uptime datetime,cityname varchar(20))"
    insert_sql = "insert into json_data(data,uptime,cityname) values(%s,%s,%s)"

    cursor.execute(insert_sql,_values)
    db.commit()
    cursor.close()

可以将采集和入库的两个函数写到一个程序文件中,一下是总的:

import requests
from lxml import etree
import json
import pymysql

def get_data():  #采集函数
    url = 'http://127.0.0.1:8005/'

    response = requests.get(url)
    response.encoding = 'utf-8'

    page_text = response.text
    text = etree.HTML(page_text)
    div_list = text.xpath('/html/body/text()')
    msg = div_list[0].strip()
    msg_json = json.loads(msg)   #loads直接转换成json
    code = msg_json["code"]
    if code == 200:
        data = msg_json['data']   #获取数据列表
        datatime= data[0]['datatime']
        uploadtime = data[0]['uploadtime']
        name = data[0]['name']
        return data
    else:
        with open('./data_error.log','a',encoding='utf-8') as f:
            f.write(f"数据获取错误,状态码为{code}\n")

def put_data(data):  #入库函数
    db = pymysql.connect(
        host = '192.168.247.100',
        port = 3306,
        user = 'root',
        password = '123457',
        database = 'test',
        charset = 'utf8'
    )
    _values = (
        (data[0]['datatime'],data[0]['uploadtime'],data[0]['name'])
    )
    cursor = db.cursor()
    # 建表语句
    # sql = "create table json_data(id int primary key AUTO_INCREMENT,data datetime,uptime datetime,cityname varchar(20))"
    insert_sql = "insert into json_data(data,uptime,cityname) values(%s,%s,%s)"

    cursor.execute(insert_sql,_values)
    db.commit()
    cursor.close()

if __name__ == '__main__':
    d = get_data()
    put_data(d)

最后看数据库成功接收到数据:
在这里插入图片描述
没有问题,这就完成了一个从前端web socket到后端数据入库的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值