Yvettre的博客

学无止境

python简单爬虫:爬取并统计自己博客页面的信息(四)

python简单爬虫:爬取并统计自己博客页面的信息(三)中介绍了html解析器的简单实现,接下来介绍mysql模块、结果输出模块,最后展示一下结果。

10. 数据库模块:mysql.py

因为结果输出模块中使用到了mysql,因此在讲结果输出模块之前,先讲mysql模块。

  • mysql是一个关系型数据库管理系统(DBMS),而数据库则是通过DBMS创建和操纵的容器。
  • 一个DBMS中可以有很多个数据库,每一个数据库中可以有很多表(tables)。表是一种结构化的文件,用来存储某种特定类型数据的结构化清单。简单理解,一个表可以看作是大家熟悉的excel文件中的一个sheet。
  • 为了方便,我在本地的mysql中手动创建了一个数据库,并在数据库中创建了一个用来存储我的csdn博客数据的表格(只有表头)
# 使用root用户登录数据库管理系统
:~$ mysql -uroot -plinux123
mysql> create database yvettre;     # 创建名为yvettre的数据库
mysql> use yvettre;                 # 使用yvettre数据库
mysql> create table if not exists csdn (datetime DATETIME, origin int, fans int, likey int, comment int, views int, score int, rank int, level int);                      # 创建名为csdn的表格
  • 在python中使用mysql,需要PyMySQL这个模块:pip install PyMySQL
  • 下面举个栗子来说明怎样简单使用python对已有的mysql数据库进行操作
# coding=utf-8
import pymysql

def main():
    # 连接本地已有的数据库
    db = pymysql.connect("localhost", "root", "linux123", "yvettre")
    # 获取cursor光标
    cursor = db.cursor()

    # 在已有的数据库yvettre中创建一个test表格,表头为data、id,数据类型都是int
    # 构建创建表格的sql语句
    sql = 'create table if not exists test (data int, id int)'
    # 执行sql语句
    cursor.execute(sql)

    # 向test表格添加数据
    sql = 'insert into test (data, id) values (100, 1)'
    # 执行sql语句
    try:
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
        print 'sucessfully!'
    except Exeption, e:
        # 如果发生错误则回滚
        db.rollback()
        print e
        print 'failed!'

    # 关闭数据库连接
    db.close()

if __name__ == '__main__':
    main()

运行结果:
spider-mysql-test

11. 结果输出模块:outputer.py

  • 结果输出器用于将解析到的有价值的数据存储到方便使用的指定文件或数据库中
  • 本文中的输出结果一方面存为一个csv,用于给自己发送邮件;另一方面存储到本地的mysql数据库中,用于以后的整体统计查询
  • 存放在csv中使用到pandas模块:pip install pandas
# 只贴出output函数,具体实现可到github(https://github.com/Yvettre/spiderMyCsdn)上查看
def output(self, data):
    # data是一个dict
    time_now = datetime.datetime.now()
    data['datetime'] = '\"' + time_now.strftime('%Y-%m-%d %H:%M:%S') + '\"'

    # to csv
    df = pd.DataFrame(data.items(), columns=['item','content'])
    bak_file = './result/output_%s.csv'%time_now.strftime('%Y-%m-%d-%H-%M-%S')
    df.to_csv(bak_file, index=False, header=False, sep='\t', mode='wb', encoding='utf-8')  # for bak_up
    df.to_csv('./result/output.csv', index=False, header=False, sep='\t', mode='wb', encoding='utf-8')
    logger.info('Bak_file: %s' %bak_file)

    # to mysql
    sql = mysql.Mysql()
    sql.insert_data(table_name, data)
    logger.info('Output to mysql is done.')

12. 关于crontab定时任务

关于crontab定时任务,可以参考Centos使用crontab定时任务

  • 定时执行脚本cronTask.sh
#!/bin/bash
# usage: ./cronTask.sh
# change 'ding_yanfang@outlook.com' to any email adress
python main.py
cat result/output.csv | mail -s 'Today your Csdn Blog gift' ding_yanfang@outlook.com
  • crontab任务设定
:~$ crontab -l
30 10 * * * cd /home/xxx/spiderMyCsdn && ./cronTask.sh

13. 结果展示

  • 本地mysql数据库结果(中间少了几天的结果是因为服务器关机了。。=。 =)
    spider-result-mysql
  • 本地result/结果
    spider-result
  • 邮件结果
    spider-email

至此,使用python实现简单爬虫自动获取自己的csdn博客信息并统计通知的功能已经简单实现~

整个工程代码可戳github:spiderMyCsdn

可能有些地方会有更好的实现,只是需要实现的任务较为简单,以后继续学习~


声明:本文代码是在本人很久之前学习的一个教程的基础上根据自己的目的修改完善的(增加了日志模块、配置模块和mysql模块以及使用继承方法增强代码扩展性),在此声明表示对原创作者的尊重

阅读更多
个人分类: python
上一篇python简单爬虫:爬取并统计自己博客页面的信息(三)
下一篇windows下数据挖掘比赛提交文件换行符问题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭