大家好,我是老表,一名Python终身学习者,数据分析爱好者,今天给大家分享微博热搜数据可视化分析系列文章,本文为该系列第一篇:获取数据。
今天的分享来满足这位读者的需求,想读“关于数据库sql或者MySQL的,就那种Python来处理数据库,比如Python爬虫爬到数据,然后封存到数据库里面,然后再从sql里面读取,进行分析可视化”。
后面写文章一方面是自己学习笔记,另外也会针对读者需求写一些专题文章,如果你有自己的想法,欢迎浏览器访问下方链接,或者点击阅读原文,给博主提意见:
- 直接来:一行代码爬取微博热搜数据
- 做准备:将爬取到的数据存入csv和mysql、其他数据库
- 搞事情:读取mysql数据并进行数据分析与可视化
- 进阶活:将可视化数据结果呈现到web页面(大屏可视化)
- 悄悄话:项目总结与思考,期待你的来稿
首先需要你的电脑安装好了Python环境,并且安装好了Python开发工具。
如果你还没有安装,可以参考以下文章:
如果仅用Python来处理数据、爬虫、数据分析或者自动化脚本、机器学习等,建议使用Python基础环境+jupyter即可,安装使用参考
如果想利用Python进行web项目开发等,建议使用Python基础环境+Pycharm,安装使用参考 : 和 。
首先我们直接浏览器搜索,就可以很快的找到微博热搜的在线页面,地址如下:
当然,我们会发现爬取的数据还是有点问题,虽然已经是数据格式了,但是热搜标题和热搜热度由于在一个td里,所以爬取的时候也是给放到了一列中,着实有点尴尬。
不过没关系,我们处理下,可以利用正则将标题和热度分成两列即可。
首先对数据进行简单处理,设置下列名和删除推荐热搜(热搜排名为'•')和置顶热搜(热搜排名为nan)。
直接无脑套入爬虫模板:
觉得这种方法比较麻烦的,可以跳过本部分,后面会介绍一种特别简单的数据获取方式(后面才想到的,之所以先记录这种麻烦方法,也是想让大家学习下这种方法,后面数据爬取中会比较常见)。
接下来,我们就开始从爬去到的数据中提取我们需要的数据啦!
首先在热搜页面,按住F12,调出开发者工具,点击开发者工具左上角的,然后选中自己想提取的数据,如下图中的。
获取到数据对应的xpath路径后,我们就可以调用lxml中的xpath函数进行数据提取啦,如下代码,输出结果为一个列表,列表里的元素就是我们的热搜标题。
这里需要注意的是,我们是获取a标签内的文本内容,所以需要在获取的xpath路径后在加上,同样的,如果有需要我们还可以获取标签内的元素对应的值,如热搜对应的链接。
获取到一条数据后,我们就要开始想获取页面所有标题数据啦,方法也很简单,我们按照上面的方法,在随便获取一个热搜标题的xpath路径,然后对比一下,取相同就可以了。
如下代码所示,我们发现两个xpath路径只有这一级不同,所以将tr后的[2]去掉即可。
当然不是,出现这种情况是因为微博有一个置顶热搜(暂且这么称呼),另外还会有1-3个微博推荐热搜(暂且这么称呼),这两种数据只有标题属性,没有其他如:排行、热度、标签等属性,分析的时候需要剔除。
当然,办法肯定是有的,前面分析、复制xpath的时候,我们已经发现每个xpath只有tr[n]中的n不同,所以写个循环变动n即可,这样每次获取每条热搜对应的相关数据即可。
新问题来了,n是多少呢?显然n不会是个定值(微博推荐热搜条数不定),我们再仔细观查页面,可以发现不管是微博热搜、置顶热搜还是推荐热搜,标题都是有的,所以我们看标题数即可。如下代码。
以上,相对完整且简洁的给大家说明白了一个简单爬虫的基本思路与行进路径,希望对初学爬虫的读者朋友有帮助,觉得还不错,记得点个赞哦。
下一讲中,我们将一起学习如何将爬去下来的数据存储到本地csv文件,或者数据库中(如:mysql,mongodb,sqlite等),关于数据存储这一节,你还想学习什么其他的内容也可以在评论区、留言区进行留言。