您的位置:首页 > 编程语言 > Python开发

python获取csdn的访问量和排名+falcon画图

2017-02-09 22:44 579 查看
打从回到老家,平时没事儿就写写blog,看看访问量和排名,也算有点小成就感。

可是CSDN最近啥时候更新排名貌似时间上有点不准,以前的时候大概8点半左右就更新了,可是最近好像有点延迟。

可不可以做个监控呢?

拿falcon画图吧

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#coding: utf8

import sys
import json
import requests
import time
import urllib2, base64
import re
import bs4

reload(sys)
sys.setdefaultencoding('utf8')

# 获取数据
headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
r = requests.get('http://blog.csdn.net/vbaspdelphi',headers = headers)
soup = bs4.BeautifulSoup(r.text)
r2 = soup.select('div#panel_Profile ul#blog_rank li')

value_viewtotal=re.findall("\D+(\d+)\D+",str(r2[0]))[0]
value_jifen=re.findall("\D+(\d+)\D+",str(r2[1]))[0]
value_paiming=re.findall("\D+(\d+)\D+",str(r2[1]))[0]

# 准备上报数据
import time
import urllib2
import json
p = []
# 定义时间戳
timestamp = int(time.time())

def predata(endpoint,metric,key,value,timestamp,step,vtype):
tags = ''
i = {
'Metric' :'%s.%s'%(metric,key),
'Endpoint': endpoint,
'Timestamp': timestamp,
'Step': step,
'value': value,
'CounterType': vtype,
'TAGS': tags
}
return i

p.append(predata("userdefine","csdn","viewtotal",value_viewtotal,timestamp,60,"GAUGE"))
p.append(predata("userdefine","csdn","jifen",value_jifen,timestamp,60,"GAUGE"))
p.append(predata("userdefine","csdn","paiming",value_paiming,timestamp,60,"GAUGE"))

print json.dumps(p, sort_keys=True,indent = 4)

#sys.exit(0)

# 上报
method = "POST"
handler = urllib2.HTTPHandler()
opener = urllib2.build_opener(handler)
url = "http://127.0.0.1:1988/v1/push"
request = urllib2.Request(url, data=json.dumps(p))
request.add_header('Content-Type','application/json')
request.get_method = lambda: method
try:
connection = opener.open(request)
except urllib2.HTTPError,e:
connection = e

if connection.code == 200:
print connection.read()
else:
print '{"err":1,"msg":"%s"}' % connection


效果图如下



另外,里面的一些模块,如果没有的话就下载,比如

pip install bs4


参考下 http://wuchong.me/blog/2014/04/24/easy-web-scraping-with-python/ 里面关于用bs4去拿html里面的元素非常不错。

重点:

其实遇到的最大难点是python里面的re在找的时候如果re.find(“排(\d+)名”,r.text)这种,貌似由于是unicode的原因,有点问题,可以尝试用\D作为非数字,但是这样以来范围就比较大了,所以借助bs4的威力就好多了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python