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

前言

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

准备

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

开始工作

  1. 首先创建自己的数据库表”浏览量",其中包括三个关键字“ip,time,add”,分别对应访问者的ip,访问时间,以及通过百度api进行分析之后的地址。如下图所示:
    云服务器篇 -- 如何在自己的网页上记录浏览量以及IP地址_第1张图片
    注意点:设计表的时候,字符集一定要选对,我这里就选择的utf-8,不然在云服务器上进行写入的时候,会报错乱码!!解决连接
    云服务器篇 -- 如何在自己的网页上记录浏览量以及IP地址_第2张图片
  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指导具体地址的方法,找到一个百度的公开接口。
    查询接口
    本来是想试试能不能自己爬上去的,但是看了一下,这不是有一个立即获取吗。云服务器篇 -- 如何在自己的网页上记录浏览量以及IP地址_第3张图片
    云服务器篇 -- 如何在自己的网页上记录浏览量以及IP地址_第4张图片
    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')

展示

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

你可能感兴趣的:(云服务器,数据库,python,mysql)