![Python数据预处理技术与实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/321/27563321/b_27563321.jpg)
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 数据表设计
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-T84_39258.jpg?sign=1734570376-4ql8bb5GRm0ASQRzo0i4UtEJjQ4vTdv2-0-21cda7df2a843744b065328302e5a33f)
数据表的设计如图3-14所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P84_13055.jpg?sign=1734570376-ZLxMBrdp14RfsvuheB8w4h4SyKpRIbCo-0-2f302765b5ec01e8d00614ebd7b5d205)
图3-14 MySQL数据库表的设计
2. 数据库存储的同步机制
打开pipline.py修改代码如下,本方法采用的是同步读写机制,即提取文件的同时执行写操作。首先建立本地数据库的连接并把中文编码格式设置为UTF-8,之后执行一般的SQL插入操作。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P84_39257.jpg?sign=1734570376-tY9dxQArsqwvp2ftw5j4NCAux2Il7FiG-0-b696380833449c4d4911996b061d63c7)
3. 数据库存储的异步机制
当爬取海量网络数据的时候,爬取速度与存储速度往往会产生冲突,采用前文介绍的数据库存储技术很可能会造成数据阻塞。基于此,需要改进数据存储方式,即采用异步存储机制。下面来介绍异步存储机制的代码实现。
首先在pipline.py文件中修改代码如下:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P85_39255.jpg?sign=1734570376-nkAfMN5kQscy4YzLDBhPb7YSCDtUzRdw-0-907a118391cc44c0df3f395b2a230bbd)
其次,在setting.py文件末行添加如下代码,用于实现全局变量的设置。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P86_39253.jpg?sign=1734570376-AusMmbphrGna3QHTeDAUGJkoi5xDNe3I-0-209cf1da416e42c14c3f8c7d2b1610f3)
4. 修改设置文件
在setting.py设置文件中修改方法的执行优先级。数字从小到大,数字越小,优先级就越高,具体设置如下:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P87_39252.jpg?sign=1734570376-TpypORVDEhN6LlIwh4VvvVy7wNn1il0G-0-fc055dbea0760e0af48c99969e8d83d6)
5. 本地化MySQL存储
运行main.py文件,实现本地MySQL数据存储。执行完成后,打开myarticles数据表查看,结果如图3-15所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P87_13830.jpg?sign=1734570376-3YKoi2bvwONN6CgfDzvannMrBv9PhTgc-0-6f4efea866b8fc388ff9757b1d7f18c9)
图3-15 MySQL存储文章数据