如何利用 Python+MySQL 存储爬取的币乎数据

1LSGO软件技术团队

贡献人:李金原

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。

If you like the content here, the greatest helpyou can give meis forwarding, so tell your friends and encourage them to learn together.

我们已经能够从网站获取了原始数据,见

如何利用Python 爬取【币乎】的数据

。接下来要做的就是将数据存储在数据库中。

本次实战选用的是 MySQL 数据库,但并不打算详细讲解如何操作 MySQL,而是分享在实际操作过程遇到的一些知识点。

将网站数据导出

其实这一步也可以略去,直接分析后导入数据库亦可,但为了熟悉 json 文件的写入和读取操作,还是先将数据导出成 json 文件。

首先要做的事,就是想好文件如何命名。考虑到每次爬取的数据有其自己的版块和页码,再加以爬取时间,我决定用版块作为母文件夹,爬取日期和页码作为文件名。效果如下:

关于日期的格式,python 中的 库可以直接实现,文件路径可以直接以字符串的形式存入或者调用 库,编写代码如下:

这儿值得一提的就是字符集编码的问题,因为我们写入的数据含有中文,在操作 json 数据以及写入文件时,都要以 utf-8 来操作,防止编码混乱。以及如果用 获取当前路径,它获得的是相对路径,在后续进行 定时运行脚本时,会出现错误,所以这里直接给出绝对路径,当然也有给出绝对路径的函数,这里不再赘述。

创建数据表

首先分析,我们想要获得的数据有哪些性质,或者说说我们想要保存数据的哪些特征。我们先看看网站存储的数据有哪些:

我们想要分析高赞文章、高产作者,那么文章的标题,作者名,赞数,收益就必不可少,要对一段时间内的文章分析,那么时间也必不可少,还有用来识别作者与文章的 号,对比网页页面,我们不难发现这些键值对的实际含义,从而提取我们想要的数据。

在 Python 3 中,连接数据库可以调用库 pymysql,建表代码如下:

作为文章唯一的识别号,我们将其设置为主键,用来防止重复插入,数据冗余,最后一项 在此处显得可有可无,但是在后续的数据可视化处会提供便利,因此此处将其添上。

数据处理

在建表时,我们注意到 是 格式,即时间戳。我们注意到从 json 文件中读取的时间为 1533773286000 这样的 Unix timestamp 格式,我们需要对其进行转换,成为符合数据库中的 TIMESTAMP 格式,我们定义如下方法:

再定义提取数据的函数:

如此,获取的数据已经变成了可以直接插入数据库的格式,接下来就定义插入数据的函数:

这里需要注意的是我们希望当有重复的文章插入时,则更新这一篇文章数据,如果不重复,则直接插入,所以在 语句后加入了人 指定 列为判断值是否重复的列,且这里的判断列必须是 或者 。

总结

至此,数据存储部分就搞定了,后面的图文我们将继续介绍数据的可视化。See You!

经过8年多的发展,LSGO软件技术团队在地理信息系统、数据统计分析、计算机视觉领域积累了丰富的研发经验,也建立了人才培养的完备体系。

欢迎对算法设计与实现感兴趣的同学加入,与我们共同成长进步。

本微信公众平台长期系统化提供有关机器学习、软件研发、教育及学习方法、数学建模的知识,并将以上知识转化为实践。拒绝知识碎片化、耐心打磨技能、解决实际问题是我们的宗旨和追求。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180815B01JFS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券