3.5 爬取数据的MySQL存储
相对于JSON存储,大家更为熟悉数据库存储,本节介绍爬取数据的本地数据库存储方法。本书选用的是通用的MySQL数据库,当然也可以选择Oracle、SQL Server等数据库。
3.5.1 MySQL与Navicat部署
MySQL原本是一个开放源码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被Sun公司收购。2009年,Oracle公司(甲骨文公司)收购了Sun公司,于是MySQL成为Oracle旗下的产品。
MySQL由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。
Navicat是香港卓软数码科技有限公司生产的一系列MySQL、MariaDB、MongoDB、Oracle、SQLite、PostgreSQL及Microsoft SQL Server的图形化数据库管理及开发软件。它有一个类似浏览器的图形用户界面,支持本地和远端数据库的多重连接。它的设计合乎各种用户的需求,这些用户包括数据库管理员,程序员,各种类型的个人客户,以及与合作伙伴共享信息的不同企业或公司。
由于MySQL与Navicat为大家所熟悉,基本安装和部署有关的资料较多,本书不再赘述。
3.5.2 MySQL存储爬虫数据
1. 数据库表的设计
打开本地MySQL数据库,其中用户名为root,密码为root。成功登录后新建数据库名为test,并在test数据库下新建myarticles数据表。具体设计如表3-2所示。
表3-2 数据表设计
数据表的设计如图3-14所示。
图3-14 MySQL数据库表的设计
2. 数据库存储的同步机制
打开pipline.py修改代码如下,本方法采用的是同步读写机制,即提取文件的同时执行写操作。首先建立本地数据库的连接并把中文编码格式设置为UTF-8,之后执行一般的SQL插入操作。
3. 数据库存储的异步机制
当爬取海量网络数据的时候,爬取速度与存储速度往往会产生冲突,采用前文介绍的数据库存储技术很可能会造成数据阻塞。基于此,需要改进数据存储方式,即采用异步存储机制。下面来介绍异步存储机制的代码实现。
首先在pipline.py文件中修改代码如下:
其次,在setting.py文件末行添加如下代码,用于实现全局变量的设置。
4. 修改设置文件
在setting.py设置文件中修改方法的执行优先级。数字从小到大,数字越小,优先级就越高,具体设置如下:
5. 本地化MySQL存储
运行main.py文件,实现本地MySQL数据存储。执行完成后,打开myarticles数据表查看,结果如图3-15所示。
图3-15 MySQL存储文章数据