该脚本的目的:获取博客的排名和积分,将抓取时间,排名,积分存入数据库,然后把最近的积分和排名信息进行绘图,查看积分或者排名的变化情况。

整个脚本的流程:是利用python3来编写,利用selnium获取网页的信息,使用re正则表达式解析积分score和排名rank,用pymysql连接mysql数据库,最后利用matplotlib进行绘图。

首先创建db: xiaoshitou

创建表blog_rank:

CREATE TABLE `blog_rank` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',

`rank` varchar(255) NOT NULL DEFAULT '' COMMENT '排名',

`score` varchar(255) NOT NULL DEFAULT '' COMMENT '积分',

`create_time` varchar(255) NOT NULL DEFAULT '' COMMENT '添加时间',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;

现在来看下绘图的结果:

数据库表,blog_rank表中存的数据:

下面就来看实现过程:

1、该文件是利用pymysql来连接数据库,新增和查询数据的(operation_mysql.py)

#coding=utf-8

importpymysql as MySQLdbimportdatetime

host= '127.0.0.1'user= 'root'passwd= '123456'port= 3306db= 'xiaoshitou'

classOperationMySQL(object):def __init__(self):"""连接数据库"""

try:

self.conn= MySQLdb.connect(host=host,

port=port,

user=user,

passwd=passwd,

db=db,

charset='utf8', )

self.cur=self.conn.cursor()exceptException as e:print('Connect MySQL Database Fail:' +e)def_close_connect(self):"""关闭连接"""self.cur.close()

self.conn.close()definsert_data(self, data):"""插入数据"""sql= 'insert into blog_rank (rank,score,create_time) values ({0},{1},{2})'.format(data['rank'], data['score'], datetime.datetime.now().timestamp())

res=self.cur.execute(sql)

self.conn.commit()

self._close_connect()def select_data(self, sql=None):"""根据sql查询数据"""

if sql isNone:

sql= 'select rank,score,create_time from blog_rank order by create_time'self.cur.execute(sql)

result=self.cur.fetchall()

self._close_connect()

headers= ('rank', 'score', 'create_time')

results= [dict(zip(headers, row)) for row inresult]#print(results)

returnresultsif __name__ == '__main__':

OperationMySQL().select_data()

2、get_my_blog_score.py,这个文件包含:获取网页内容,解析排名和积分,将抓取的数据存入数据库,读取数据库进行绘图

#coding=utf-8

try:importrequestsexcept:importos

os.system('pip install requests')importrequestsimportrefrom selenium importwebdriverfrom time importsleepfrom operation_mysql importOperationMySQLclassGetMyBlogScore:"""获取博客园积分和排名"""

def __init__(self):pass

def_get_blog_content(self):"""获取博客的页面内容"""url= "http://www.cnblogs.com/xiaoshitoutest"driver=webdriver.Firefox()

sleep(1)

driver.get(url)

sleep(1)

self.content=driver.page_source

driver.quit()return

def_match_content(self, compile_str_args):"""进行匹配内容"""compile_str=re.compile(compile_str_args)

result=compile_str.findall(self.content)

final_str= re.sub(r'\D', '', result[0])returnfinal_strdef_save_database(self, data):"""将结果写入数据库"""

if isinstance(data, dict) and data is notNone:

OperationMySQL().insert_data(data)print('Insert Data Success.')else:print('The data is invalid.')def_show_map(self):"""读取数据库中的值,画图表,保存结果"""datas=OperationMySQL().select_data()importmatplotlib.pyplot as pltfrom datetime importdatetimefrom matplotlib.dates importdatestr2num,DateFormatterimportmatplotlib.dates as dates

x_= [ datetime.fromtimestamp(float(x['create_time'])).strftime('%Y-%m-%d %H:%M:%S') for x indatas]

score= [x['score'] for x indatas]

rank= [x['rank'] for x indatas]

plt.rcParams['font.sans-serif'] = ['FangSong']

fig, ax=plt.subplots()

ax.xaxis.set_major_locator(dates.DayLocator())

ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))

ax.plot_date(datestr2num(x_),score,'--')

ax.set_xlabel('日期')

ax.set_ylabel('积分')

ax.set_title('博客园排名--积分')

fig.autofmt_xdate()#plt.show()

plt.savefig('./rank_score.png')defrun(self):

score= r'

([\s\S]*?)'rank= r'([\s\S]*?)'self._get_blog_content()

scores=self._match_content(score)

ranks=self._match_content(rank)

result= dict(zip(['score', 'rank'], [scores, ranks]))

self._save_database(result)

self._show_map()if __name__ == '__main__':

GetMyBlogScore().run()

直接运行该文件,就会在当前目录下生成一个rank_score.png的图片,就是关于积分的变化图。

开始那张是:时间--积分的绘图,我在放一张。积分--排名变化图

python读取数据库绘图_获取博客积分排名,存入数据库,读取数据进行绘图(python,selenium,matplotlib)...相关推荐

  1. python创建新工程_个人博客二|创建项目

    Django是一种基于Python的开源Web框架,采用了MVC的框架模式. 工作区    D:Userswork 1.创建虚拟环境 mkvirtualenv  stormsha 2.安装django ...

  2. 用nodejs配合python破解X-Ca-Signature,抓取博客积分数据

    世界上最稀缺的资源是时间. 在某一瞬间我惊恐得发现,一生三万天,已过三分之一,念及年少不更事,蹉跎而过,觉得心中有愧.至今无建树,脑袋里想起一句话,"不因虚度年华而悔恨,也不因碌碌无为而羞耻 ...

  3. MySQL_简易图书数据库管理系统_峰峰博客_峰峰吃芒果

    简易图书数据库管理系统 简易图书管理数据库(假定数据库名为:BooksDB)包含4个关系(即:数据表).关系名.属性及说明分别如下述各表所示. 读者类别表:ReaderType 序号 字段名 数据类型 ...

  4. python模拟足球射门_[转载]博客园仿真足球竞赛平台Python版SDK

    为了方便喜欢Python的同学能使用Python开发自己的球队,所以编写了此SDK.这个SDK 基本上是参照C#版SDK改过来的,除了一些复杂的几何算法没有实现外,其他功能都已实现.喜欢的朋友可以自己 ...

  5. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  6. 用python,selenium抓取博客积分

    世界上最稀缺的资源是时间. 在某一瞬间我惊恐得发现,一生三万天,已过三分之一,念及年少不更事,蹉跎而过,觉得心中有愧.至今无建树,脑袋里想起一句话,"不因虚度年华而悔恨,也不因碌碌无为而羞耻 ...

  7. Python实现自动推本地github博客到远程仓库

    Python实现自动推本地github博客到远程仓库 以前的简单版本 通过python中的os模块操作系统命令 详情可参考:Python实现一行代码推本地git到远程仓库 升级版本 本次加入了监听文件 ...

  8. csdn博客积分规则与等级说明

    csdn博客积分规则与等级说明 积分获取 博客积分是CSDN对用户努力的认可和奖励,也是衡量博客水平的重要标准.博客等级也将由博客积分唯一决定.积分规则具体如下: 1.每发布一篇原创或者翻译文章:可获 ...

  9. 用python搭建个人博客过程_技术分享|利用Python Django一步步搭建个人博客(四)...

    您好,欢迎来到本期"利用Python Django一步步搭建个人博客"系列的第四部分.在上一篇教程中,我们学习了如何编写URL并将其映射到页面.在我们继续之前,我们需要做的一件事是 ...

最新文章

  1. boost信号量 boost::interprocess::interprocess_semaphore的用法
  2. Confluence 6 配置系统属性
  3. 自学编程的 6 个技巧总结
  4. Oracle数据库无法向listener注册的解决一例
  5. 【php7扩展开发五】函数调用
  6. 判断大小_美人计 | 学会这招大小骨架判断法,我知道自己不是胖了
  7. 一加9R将推12+256GB新版本:骁龙870+120Hz高刷屏
  8. python零基础自学教材-零基础的小白怎么学python?
  9. Java数据结构(1)---顺序表
  10. rabbitmq多个消费者_选型必看:RabbitMQ 七夕 Kafka,差异立现
  11. php pcntl_alarm,pcntl_alarm定时闹钟信号详解
  12. 叶酸修饰的金星形纳米颗粒,Gold star shaped nanoparticles modified with folic acid
  13. 制作U盘引导盘,安装Ubuntu18.04系统
  14. SQL:查询结果升序、降序排列
  15. 初设大蟒蛇之Python函数篇
  16. java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.vick.myapp/com.vick.mya
  17. ArcGIS制图及出图小技巧——以土地利用图为例
  18. 科研中提高效率的软件网站
  19. msbuild 语法_MSBuild入门(续)
  20. 对香农采样定理的理解

热门文章

  1. matlab没有pso工具箱,MATLAB-PSO工具箱
  2. Jupyter notebook 中使用pip install安装第三方Python包
  3. python图像卷积_图像处理——卷积原理、二维卷积python实现
  4. 【rabbitmq安装教程】centos7下安装rabbitMQ
  5. 阿里iconfont使用教程
  6. do...while循环
  7. python椭圆识别_Python+pillow计算椭圆图形几何中心
  8. 川大计算机学院研究生分数线,四川大学计算机学院2018年硕士研究生招生拟录取名单及成绩公示...
  9. 手机如何访问电脑局域网文件共享服务器,数据共享 手机怎么访问电脑文件?多个设备之间数据共享...
  10. linux qt交叉编译opencv,c-使用Qt和opencv交叉编译到Raspberry Pi