本人剖判了孙燕姿的四万字歌词发掘,Python爬取老友记豆瓣争执生成词云

最近瞧了一篇文章,我做了六百万字得歌词分析,告诉你中国rapper都在唱什么.立马想到也来分析分析我姿看看。最后的4万字歌词的词云让我看到一条箴言是:我们不要爱情幸福是相信自己哈哈哈,看来单身狗是要注孤生了言归正转,Let‘s
go!

更新了一版简单点的教程soda学python-原来周杰伦最喜欢用四个字是
谢谢大家的支持!

不想老是忙着忙着被作业、杂事拖着走,所以最近打算每周做一个喜欢的small
task,取悦自己。

图片 1文字云.png

第一个想到的是老友记,十月初看完老友记,非常喜欢,然后开始了速度缓慢的二刷。任务呢就是爬下豆瓣老友记的短评,做一个词云。

  • 1.任务目标
  • 2.爬取歌词
    • 2.1观察
    • 2.2 代码
      • 2.2.1 爬取歌词链接
      • 2.2.2 爬取歌词-2.2.3 清洗歌词-2.2.4 歌词文本分词
  • 3.歌词词云分析

我的专业会接触到编程,于是课后学了一点点python入门,只懂得一些基本语法和数据结构,有时候闲着会写点脚本。所以对我来说,完成这个任务是一个学习的过程。

我主要参考了三篇文章:

  • 爬取孙燕姿的所有中文歌词
  • 对孙燕姿的中文歌词进行分析制作词云
  1. 我用Python爬了12万条影评,告诉你《战狼》都在说些啥
  2. Python正则表达式指南
  3. Python词云 wordcloud
    十五分钟入门与进阶

因为没找到现成的歌词包,因此我选择的是自己在歌词千寻网上爬,歌词千寻对于爬虫来说还是非常友好简单的,基本和soda学python—简单爬糗百过程一致。

思路简单讲就是一页一页的爬,用jieba将评论分词,最后用wordcloud做词云。
具体一些:

首先,让进入孙燕姿的主页歌词千寻-孙燕姿

  1. 用requests库来爬取网页,所以需要自己的User-Agent和cookies。浏览器里打开短评页面登陆自己的账号,在审查元素模式下,刷新网页就能在network查看:

图片 2歌词千寻.png

![](https://upload-images.jianshu.io/upload_images/901056-c1c0826b73b89cfb.png)

查看自己的user-agent和cookies.png

接着,查看条目。我们发现页面表格中的主要内容都在tr标签的td标签下,前两个td标签中分别包含了歌曲名专辑名

  1. 分析评论页面url以及源代码,以编写正则表达式(Beautifulsoup也行)把页面中的评论取出来。页面中的评论全都在<p
    class=””>后面,最开始我用beautifulsoup取评论出来,这样不太方便的是有的评论中带有图片等内容,使得<p>标签里夹有评论和其它标签,需要对这种情况做出判断并进一步处理。用正则表达式要好一些,遇到的困难是有的评论包含换行符,而.不能匹配换行符,然后尝试了[.n],[n.]后在网上找到了解决方法:[sS]能够匹配所有字符。
  2. 每页有20条评论,需要把下一页的链接取出来。比如老友记第一季的短评的第二页地址是:https://movie.douban.com/subject/1393859/comments?start=20&limit=20&sort=new_score&status=P&percent_type=,每次循环需要替换的是“start=20”这一部分。最开始我发现第一页start=0,第二页20,每次加20是有规律的,后来发现这样爬取的评论会重复。正确做法是每次都将页面中后页按钮下的链接取出来。
  3. 当爬取评论达到一定数量,几千或是过万后豆瓣会识别这是爬虫,便会禁止爬取,这时需要将未能爬取的网页输出,然后在浏览器中打开豆瓣输入验证码以证明自己不是爬虫,然后将代码中起始爬取url替换成刚刚输出的网址,这也是为什么打开txt文件使用‘a’追加模式的原因。这样就能一直爬取了,虽然需要点手动输入。

图片 3查看条目.png其中第一个标签中还有链接信息,经测试“
class=“f4”**
标签下图片 4歌词元素

![](https://upload-images.jianshu.io/upload_images/901056-32db783cba7ab995.png)

输入验证码.png

发表评论

电子邮件地址不会被公开。 必填项已用*标注