Intro

前一阵子写了个爬取网易云音乐评论的python程序
但是只是完成了一个开端,最近抽空稍微完善了一下

先看一下整体流程

  1. 获取要爬取的歌手的ID
  2. 通过ID获取这个歌手的所有专辑ID
  3. 通过专辑获取歌手的所有歌曲
  4. 歌曲间一个一个的通过爬虫进行爬取

Problem

这里面存在几个问题

  1. 怎么判断一个歌曲或者一张专辑已经爬过了
  2. 怎么保证爬取的效率
  3. 怎样防止网易的反爬虫机制

Solution1

目前只解决了第一个问题,我的方法是先生成一个Task表,将任务以及任务的进度存储在Task表中,每次重新运行的时候先从Task表中读取进度,然后再进行爬取操作。

TaskSchedule.json

[{"id": "35520072","isCrawler": 1,"musicId": "2116","name": "\u653e & \u62ab\u98ce","songs": [{"album": "35520072","isCrawler": 1,"id": "478731242","name": "\u653e","offset": "-1"}, {"album": "35520072","isCrawler": 0,"id": "478736172","name": "\u62ab\u98ce","offset": "530"}]
}, {...}]

如上形成json格式的一个文件,将专辑ID和是否爬取存入,offset代表这首歌爬取到了第几个评论,每次爬取完通知爬取者取更新这张表(通过调用trigger方法)

def trigger(self,musicId,offset):isOk = FalsealbumList = self.load()for album in albumList:if isOk:breakif album["isCrawler"] == 1:continuefor song in album["songs"]:if song["id"] == musicId:if offset == -1:song["isCrawler"] = 1for song in album["songs"]:isCrawler = 1if song["isCrawler"] == 0:isCrawler = 0breakalbum["isCrawler"] = isCrawlerelse:song["offset"] = offsetisOk = Truelogger.critical("%s has fininsh with %s"%(str(musicId),str(offset)))breakself.store(albumList)

Solution2

第二个问题可以用多线程去解决,虽然Python本质上没有多线程,但是在IO密集型操作中,类似爬虫发送http请求的操作中存在大量IO操作,因此多线程还是可以几何倍增加爬取速度的。

方法就是将要爬取得内容放进队列中,然后多线程利用线程池进行出队操作选择要爬取的对象。这一部分待完工。

Solution3

第三个问题存在于爬取的测试过程中,在爬取中不一会就出现503拒绝访问的错误。这是网易云音乐对API的保护,我们只能利用爬虫代理进行深一步操作,待完工。

最后附一个爬取时候的截图

Github: https://github.com/WJerry0227/MusicComment163

持续更新中。。。

爬取网易云音乐评论2相关推荐

  1. python爬取评论_python爬取网易云音乐评论

    本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...

  2. python爬取网易云音乐评论并进行可视化分析

    2019独角兽企业重金招聘Python工程师标准>>> 前言 今天为大家一个爬取网易云音乐评论的Python案例,并用Python的第三方库来进行可视化分析,生成图表样式,可以清晰地 ...

  3. python爬取网易云音乐热评_python爬取网易云音乐评论

    本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...

  4. python爬取网易云评论最多的歌_python爬取网易云音乐评论

    本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...

  5. python爬取网易云音乐评论分析_python爬取网易云音乐评论

    本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...

  6. Selenium爬取网易云音乐评论

    Selenium爬取网易云音乐评论 一.爬取工具 1.1 selenium ​ selenium这是一个第三方库我们可以通过 pip install selenium来安装这个第三方库. ​ Sele ...

  7. golang+es 爬取网易云音乐评论

    目的和准备 目的: 为了知道自己歌单中每首歌的评论,然后通过歌曲id来检索这首歌的所有评论,并且想熟悉运用golang中的channel以及整个爬虫架构 准备: 语言:golang 编辑器: gola ...

  8. golang+es爬取网易云音乐评论

    目的和准备 目的: 为了知道自己歌单中每首歌的评论,然后通过歌曲id来检索这首歌的所有评论,并且想熟悉运用golang中的channel以及整个爬虫架构 准备: 语言:golang 编辑器: gola ...

  9. 用python爬取网易云评论_python爬取网易云音乐评论

    本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...

  10. python爬音乐评论生成词云图_python爬虫+词云图,爬取网易云音乐评论

    又到了清明时节,用python爬取了网易云音乐<清明雨上>的评论,统计词频和绘制词云图,记录过程中遇到一些问题 爬取网易云音乐的评论 一开始是按照常规思路,分析网页ajax的传参情况.看到 ...

最新文章

  1. Go程序崩溃现场应该如何保留?
  2. oracle几个状态,oracle启动的四个状态
  3. sklearn自学指南(part35)--近邻传播及均值漂移
  4. socket编程介绍
  5. [leetcode] Median of Two Sorted Arrays 寻找两个有序数组的中位数
  6. java 数组随机抽取_Java利用数组随机抽取幸运观众
  7. OpenStack回顾和展望-2018
  8. 数据结构学习-Java实现复数类
  9. C语言中学生成绩管理系统
  10. 移动硬盘驱动怎么修复_为什么您的新硬盘驱动器未在Windows中显示(以及如何修复)...
  11. PhotoshopPS软件快捷键教程
  12. ASML公司Q3季度营收27.9亿欧元
  13. Python selenium淘宝抢购物品程序
  14. 法国物联网公司Sigfox 获1.6亿美元E轮融资
  15. 【第十三届蓝桥杯C++ B组省赛编程题详解】
  16. Unity 3D 游戏与编程
  17. html转换txt文本格式方法,hthtml转txtml转换txt文本格式方法
  18. 前端入门 1| HTML基本结构
  19. 转个有意思的东西: 脑残体全论(2007-08-20 13:48)
  20. VScode检测到#include 错误,请更新includepath。已为此翻译单元 禁用波形曲线//gcc : 无法将“gcc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

热门文章

  1. markdown 语法大全
  2. python量化交易实战 pdf 王晓华_Ext JS实战(第2版)pdf
  3. Unity接入心知天气,获取当前城市天气状况
  4. ps读写ddr3里面的数据 zynq_DDR3读写数据调试
  5. 高效能人士的七个习惯总结
  6. 现代密码学-CA与数字证书详解
  7. 第十一章 枚举与泛型 总结
  8. CF1528B Kavi on Pairing Duty(dp)
  9. vue3 + router-view + keepalive parentComponent.ctx.deactivate is not a function
  10. Codeforces Round #476 (Div. 2) 题解