Python爬虫:喜马拉雅FM

编程派微信号:codingpy

自己喜欢在上班的途中听点有声书,所以经常在喜马拉雅上找资源,要找到一个好听的节目不容易,虽然在喜马拉雅官网上可以按分类来看,但是却不能按点赞数或者评论内容排序找,不是很方便。

于是就用Python写了个爬虫,把所有声音的相关信息、评论内容都抓取下来,然后放到数据库来分析,这样喜欢什么样的资源,直接根据声音或评论的内容来汇总分析,结果就一目了然了。

流程实现图

(点击图片查看大图)

Urllib,requests, selenium

Web的访问使用urllib和urllib2,相比requests、selenium来说,效率更高些,感觉也稳定些,之前使用requests的遇到https的网址处理起来有点问题。而selenium呢,自动化操作可以不用分析具体页面的处理逻辑,不过对于这种海量数据,处理起来速度就会慢很多。

多线程和队列。

使用了2个threading.Thread的继承类,Ximalaya类用来解析声音专辑,分析提取专辑内的声音信息,解析出评论地址;CommentDown类专门用来提取保存评论内容信息;一般一个声音会有多条评论,多的上千条评论,所以CommentDown分配了10个线程来提取评论,Ximalaya分配了3个线程来分析专辑的声音信息。

使用了2个队列,1个用来保存专辑url,大小100,1个用来保存评论url,大小设置为200;这样在超过队列最大值的时候就会停下来,等待前面队列里处理了再继续,可以有效控制整个爬虫速度,以免访问太过频繁被网站给屏蔽了。

数据保存

使用了Mongodb数据库,Nosql处理高并发的,相比SQL速度和效率要高得多。Mongodb里在music下保存声音的相关信息(比如声音的专辑名、专辑地址、声音的地址、声音的时长、点赞数等等),bookcomment下保存声音的评论内容。

断点续传、重复处理

遇到中途中断后要继续执行,还得考虑下断点续传,这里处理得比较简单粗暴。在Ximalaya处理声音的时候,会先判断数据库是否有声音的地址,如果存在就是跳过不再处理,在CommentDown处理评论的时候,判断判断数据库是否有声音的地址,如果存在就是跳过不再处理,这样对于后面比较费时处理部分都可以直接跳过,也不会存在有重复的数据会影响最后的分析的问题。

异常处理

程序在解析页面的时候,可能会有超时之类的异常情况,增加了对应的异常处理,socket.setdefaulttimeout(20)设置全局超时为20秒,超过20秒就会超时报错,这样再通过异常捕获来处理,设置了异常处理记数器,对于异常页面重复处理指定次数后不再处理,避免部分声音页面被删除一直访问异常的情况。

数据分析

最后对保存到数据库的数据进行分析,做分析的时候Nosql做关联分析太痛苦了,完全不如sql查询方便,于是把数据导入到Oracle来进行的分析,根据评论内容中的关键字来标识判断(例如:“点赞”,“好听”,“太棒“之类的都判断成受欢迎),最后再用汇总统计出结果。

结果

评论最受欢迎的TOP20有声书:

评论最受欢迎的TOP10综艺节目:

评论最受欢迎的TOP20音乐:

评论普通话说得最好的节目:

最后附上源代码地址:http://git.oschina.net/highroom/My-Project/blob/master/Ximalaya.py,有兴趣的朋友可以点击“阅读原文”查看。

python 喜马拉雅_Python爬虫:喜马拉雅FM相关推荐

  1. python喜马拉雅_Python爬虫实战案例:取喜马拉雅音频数据详解!

    前言 喜马拉雅是专业的音频分享平台,汇集了有声小说,有声读物,有声书,FM电台,儿童睡前故事,相声小品,鬼故事等数亿条音频,我最喜欢听民间故事和德云社相声集,你呢? 今天带大家爬取喜马拉雅音频数据,一 ...

  2. python爬取喜马拉雅_Python爬虫实战案例之爬取喜马拉雅音频数据详解

    这篇文章我们来讲一下在网站建设中,Python爬虫实战案例之爬取喜马拉雅音频数据详解.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 前言 喜马拉雅是专业的音频分享平台,汇集 ...

  3. python 喜马拉雅_Python爬虫入门教程14:喜马拉雅有声书音频爬取

    基本开发环境????Python 3.6 Pycharm 相关模块的使用????import requests import os 安装Python并添加到环境变量,pip安装需要的相关模块即可. 一 ...

  4. 智联招聘python岗位_Python爬虫爬取智联招聘职位信息

    import urllib2 import re import xlwt '''遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!''' cl ...

  5. python代码_python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定!

    你好 由于你是游客 无法查看本文 请你登录再进 谢谢合作 当你在爬某些网站的时候 需要你登录才可以获取数据 咋整? 莫慌 小帅b把这几招传授给你 让你以后从容应对 那么 接下来就是 学习 python ...

  6. 爬虫python区别_Python爬虫-04:贴吧爬虫以及GET和POST的区别

    1. URL的组成 汉字通过URL encode(UTF-8)编码出来的编码,里面的字符全是打字节 如果你复制粘贴下来这个网址,出来的不是汉字,而是编码后的字节 https://www.baidu.c ...

  7. 爬虫python入门_python爬虫入门教程有哪些?适合的只有这三个

    python爬虫是现在包括以后一种很重要的获取数据的方式. 当然,也因为网络爬虫本身也很有趣,所以很多人了解过一次爬虫后,就产生了浓厚的兴趣. 但是,想学python爬虫的话,应该看什么python爬 ...

  8. python异常处理_Python爬虫入门(5):URLError异常处理

    大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...

  9. 爬虫爬取python词汇_Python爬虫入门案例:获取百词斩已学单词列表

    百词斩是一款很不错的单词记忆APP,在学习过程中,它会记录你所学的每个单词及你答错的次数,通过此列表可以很方便地找到自己在记忆哪些单词时总是反复出错记不住.我们来用Python来爬取这些信息,同时学习 ...

最新文章

  1. linux xampp eclipse xdebug 无法进入断点
  2. Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解
  3. 高阶函数||编程范式: 命令式编程/声明式编程 || 编程范式: 面向对象编程(第一公民:对象)/函数式编程(第一公民:函数)
  4. hash table(开放寻址法-线性探查实现的哈希表)
  5. 【渝粤教育】国家开放大学2018年春季 8661-21T传感与检测技术 参考试题
  6. python电脑编程求圆的面积案例_学Python划重点七 网络编程(UPD Socket编程、上传文件实例、计算圆的面积实例)...
  7. 使用Sakura查看字符十六进制编码(附带ASCII编码表)
  8. java前端导入excel_Java之导入Excel Vue框架前端篇
  9. iai控制器服务器ON信号,IAI控制器型号说明的.pdf
  10. WordPress文章页面获取评论次数
  11. IT人才异军突起 有招网引领业界精英
  12. Android编程权威指南[pdf]
  13. 电气器件系列十六:热电偶、热电阻
  14. 何恺明团队新作ViTDet:用于目标检测的视觉Transformer主干网络
  15. android pos机打印
  16. python 语言与numpy库
  17. ansys一段时间后进入model报错:ansysWBU.exe encountered a problem.
  18. 接盘恒大、清债,自救的华远地产能度过地产寒冬吗?
  19. Connect internal only, until freed错误处理
  20. 【Paper】Deep Learning for Anomaly Detection:A survey

热门文章

  1. python中matplotlib绘图中文显示问题
  2. 邮件多面手!Foxmail 6.5正式版新体验
  3. log4j2漏洞各大厂应对措施
  4. Linux--内核版本和发行版本
  5. 机器学习_深度学习毕设题目汇总——语音
  6. 炒币机器人:币圈炒币是怎么亏钱的
  7. 科研热点|警惕!10月WOS数据库更新,这2本期刊被剔除SCI~
  8. Android如何判断系统是否已经被Root
  9. Ubuntu解决外接2K屏分辨率低问题
  10. 软件开发人员转型指南