云服务器篇 -- 如何在自己的网页上记录浏览量以及IP地址

前言

在做了自己的网页后,一直想知道到底有多少人访问过自己的主页。但一直没时间好好研究,最近稍微空了一下,大概补充一下这点。

准备

  • 自己的服务器
  • flask
  • pymysql
  • time
  • 百度ip地址查询
  • requests
  • mysql数据库

开始工作

  1. 首先创建自己的数据库表”浏览量",其中包括三个关键字“ip,time,add”,分别对应访问者的ip,访问时间,以及通过百度api进行分析之后的地址。如下图所示:
    在这里插入图片描述
    注意点:设计表的时候,字符集一定要选对,我这里就选择的utf-8,不然在云服务器上进行写入的时候,会报错乱码!!解决连接
    在这里插入图片描述
  2. python上的访问数据库包
    详解连接
    详细的内容,可以查看连接里的博客。在这里主要说下自己的代码
sql = "INSERT INTO 浏览量 VALUES('"+ip+"','"+time_+"','"+temple+"');"
    conn = pymysql.connect(host='xxxxx',port=xxxx,user='xxxxx',passwd='xxxxxx',db='xxxxx')    
    cur = conn.cursor()
    cur.execute(sql)
    conn.commit()
    cur.close()
    conn.close()
  1. 获取ip的函数
    说起来还挺简单的
import request
ip = request.remote_addr
  1. 获取时间的函数
import time
 time_ = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 
  1. 转化为具体地址
    其实上面两步已经差不多了,但是光看ip谁知道是哪里的啊,所以去搜一下通过ip指导具体地址的方法,找到一个百度的公开接口。
    查询接口
    本来是想试试能不能自己爬上去的,但是看了一下,这不是有一个立即获取吗。
    在这里插入图片描述
    1000次免费,还挺不错的,就先试试这个了。接着就是在flask里面写请求接口了
#调用百度api查询地址
    url = 'http://ipapi.api.bdymkt.com/ip2location/retrieve'
    data = '{\n  \"ip\":\"'+str(ip)+'\"\n}'
    headers = {
        'Content-Type': 'application/json;charset=UTF-8',
        'X-Bce-Signature': 'AppCode/自己的appcode(去自己的管理台获取)'
    }
    r = requests.request("POST", url, data=data, headers=headers)
    ans = json.loads(r.content.decode('utf-8'))#string转字典
    temple = str(ans["country"]+":"+ans["province"]+":"+ans["city"]+":"+ans["county"]+":"+ans["isp"])

特别注意,这里面还有几个小问题:

  • 返回的时候必须先进行decode('utf-8)进行编码
  • 获取content之后还是string,必须通过json.loads转化为字典

全部代码

@app.route("/xxx.html",methods=['GET', ])
def get_person_zone():
    ip = request.remote_addr
    time_ = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 
#调用百度api查询地址
    url = 'http://ipapi.api.bdymkt.com/ip2location/retrieve'
    data = '{\n  \"ip\":\"'+str(ip)+'\"\n}'
    headers = {
        'Content-Type': 'application/json;charset=UTF-8',
        'X-Bce-Signature': 'AppCode/xxxxx'
    }
    r = requests.request("POST", url, data=data, headers=headers)
    ans = json.loads(r.content.decode('utf-8'))#string转字典
    temple = str(ans["country"]+":"+ans["province"]+":"+ans["city"]+":"+ans["county"]+":"+ans["isp"])
    #数据库写入
    print(temple)
    sql = "INSERT INTO 浏览量 VALUES('"+ip+"','"+time_+"','"+temple+"');"
    conn = pymysql.connect(host='xxxx',port=xxxx,user='xxxx',passwd='xxxxx',db='xxxxx')    # db:表示数据库名称
    cur = conn.cursor()
    cur.execute(sql)
    conn.commit()
    cur.close()
    conn.close()
    return render_template('xxxxx.html')

展示

在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hanzoe_lwh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值