回顾

有了 爬取网易云音乐个人动态中的视频(Ⅰ) 和 爬取网易云音乐个人动态中的视频(Ⅱ) 的铺垫, 编写爬虫的代码便显得没那么突出了.

实现

直接show代码!

给出加密的代码

encrypt_api.py

import base64
from Cryptodome.Cipher import AES
import os
import json
import binascii# 来源: https://blog.csdn.net/tzs_1041218129/article/details/52789153
# 来源: https://github.com/darknessomi/musicbox/blob/master/NEMbox/encrypt.py
# 根据上述两个网站, 对其做了一点点修改, 使其对我代码能生效__all__ = ['encrypt_data']MODULUS = ('00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7''b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280''104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932''575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b''3ece0462db0a22b8e7')
PUBKEY = '010001'
NONCE = b'0CoJUm6Qyw8W8jud'def aes(text, key):pad = 16 - len(text) % 16text = text + bytearray([pad] * pad)encryptor = AES.new(key, 2, b'0102030405060708')ciphertext = encryptor.encrypt(text)return base64.b64encode(ciphertext)def rsa(text, pubkey, modulus):text = text[::-1]rs = pow(int(binascii.hexlify(text), 16),int(pubkey, 16), int(modulus, 16))return format(rs, 'x').zfill(256)def encrypt_data(dict_data):"""text = {"ids": "[\"12A059550A712E4DDB3013DCDE3C92B4\", \"5B0AF067CBB42F7789F7B97E13827565\"]","resolution": "1080","csrf_token": ""}"""text = json.dumps(dict_data).encode('utf-8')secret = binascii.hexlify(os.urandom(16))[:16]params = aes(aes(text, NONCE), secret)encSecKey = rsa(secret, PUBKEY, MODULUS)data = {"params": params,"encSecKey": encSecKey}return data

接下来是主要的脚本

代码比较粗糙, 其中使用time.sleep方法等待phantomjs加载页面

main.py

import requests
import csv
from selenium import webdriver
import timefrom encrypt_api import encrypt_data#############################################
# BEGIN 一些url和http请求头的设置
header = {'Accept': '*/*','Accept-Encoding': 'gzip,deflate,sdch','Accept-Language': 'zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4','Connection': 'keep-alive','Content-Type': 'application/x-www-form-urlencoded','Host': 'music.163.com','Referer': 'http://music.163.com','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36',
}event_url = 'http://music.163.com/#/user/event?id=343142613'
enent_mv_api_url = 'http://music.163.com/weapi/cloudvideo/playurl'# END 一些url和http请求头的设置
#############################################driver = webdriver.PhantomJS(executable_path=r'E:\Study\phantomjs-2.1.1-windows\bin\phantomjs.exe')
driver.get(event_url)
# 等待3s, 期望页面能加载成功
time.sleep(3)
# 滚动到页底
js = "document.getElementById('g_iframe').contentWindow.scrollTo(0,9999999)"
driver.execute_script(js)
time.sleep(3)
driver.get_screenshot_as_file('tmp/test_screenshot.png')
driver.switch_to.frame('g_iframe')
event_mv_list = [{'details': i.text, 'id': i.get_attribute('data-vid')}for i in driver.find_elements_by_css_selector('div.info.f-pa') if i is not None]
# event_mv_list[0]
# {'name': '【耳机体验】3DC音效《BINGBIAN病变》秋仁 - by 自由者音效\n47149\n04:10', 'id': '5B0AF067CBB42F7789F7B97E13827565'}print('共有%d个视频' % len(event_mv_list))
if len(event_mv_list):event_mv_list_ids = [i['id'] for i in event_mv_list]data = {'ids': str(event_mv_list_ids),"resolution": "1080","csrf_token": ""}data = encrypt_data(data)sess = requests.session()resp = sess.post(enent_mv_api_url, data=data, headers=header)if resp.status_code == 200:# 保存视频urlwith open('tmp/mv_urls.txt', 'w') as f:for each in resp.json()['urls']:f.write(each['url']+'\n')# 保存jsonwith open('tmp/resp_json.txt', 'w') as f:f.write(resp.text)# 把视频的信息和json一起保存with open('tmp/mv_info.csv', 'w', newline='') as f:writer = csv.DictWriter(f, ['name','like','time','id','url','size','validityTime','r'])writer.writeheader()csv_dict_data = resp.json()['urls']for i, each in enumerate(csv_dict_data):each['name'], each['like'], each['time'] = event_mv_list[i]['details'].split('\n')writer.writerow(each)

结果

给出mv_urls.txt的截图, 如下

下载

有了这些url之后, 可以采用下载工具去进行下载, 诸如IDM等等多线程的下载工具都很不错! 但是需要注意的是, 这样下载下来的文件可能文件名并不是你在网页上面看到的MV名, 所以可能需要配合使用mv_info.csv来对其进行重命名操作. 这是不难的.

更多

以上代码存放在 GetCloudMusicVideoOnEvent

爬取网易云音乐个人动态中的视频(Ⅲ): 实现爬取过程相关推荐

  1. 爬取网易云音乐个人动态中的视频(Ⅱ): 分析并获取api

    回顾和概览 在 爬取网易云音乐个人动态中的视频(Ⅰ) 中简单的分析了一下需要做什么, 现在要做的就是获取网易云的api, 很遗憾, 网易云并没有开放api出来, 但是我们可以对网页进行调试, 尝试从中 ...

  2. 爬取网易云音乐个人动态中的视频(Ⅰ): 分析

    前言 在某天下午, 我愉快的刷着云村哈哈, 很欢乐, 无意看到我所关注的一位 音乐人 说要下架他(她)所创作的所有电台, 我想着会不会以后动态里的视频也要删除呢? 刚好很久没有写过爬虫的代码了, 于是 ...

  3. python爬取网易云音乐歌单_【python】爬取并批量下载网易云歌单,嗨翻暑假!

    [Python] 纯文本查看 复制代码# 利用 Selenium 抓取淘宝商品并用 PyQuery 解析得到商品的图片.名称.价格.购买人数. # 店铺名称.店铺所在地信息,并将其保存到MongoDB ...

  4. 使用Puppeteer轻松爬取网易云音乐、QQ音乐的精品歌单

    背景 最近在学习Puppeteer进行自动化操作,另一方面为了防止上班时间被打扰,是时候爬点歌单在上班的时候,用来抵抗外界的干扰了. 地址 项目完整代码地址:github.com/BingKui/We ...

  5. Selenium解决动态渲染页面----爬取网易云音乐全部评论

    爬取网易云音乐全部评论,我们先随便找一首歌,这里以毛不易的水乡为例.毛不易–水乡 一.常规方法 1. 尝试直接爬取 先直接用歌曲链接直接爬取 import requests#URL url = 'ht ...

  6. python爬虫爬取网易云音乐歌曲_Python网易云音乐爬虫进阶篇

    image.png 年前写过一篇爬网易云音乐评论的文章,爬不了多久又回被封,所以爬下来那么点根本做不了什么分析,后面就再改了下,加入了多线程,一次性爬一个歌手最热门50首歌曲的评论,算是进阶版了- 思 ...

  7. [爬虫]Python爬取网易云音乐搜索并下载歌曲!

    Python爬取网易云音乐搜索并下载歌曲! 文章目录 Python爬取网易云音乐搜索并下载歌曲! 1.准备工作 2."实地"观察 3.开始码代码! 4.搜索并下载 结束语 1.准备 ...

  8. Python爬取网易云音乐辑的图片、专辑名和专辑出版时间

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 作者:阿里波特 来源:CSDN Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 h ...

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

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

最新文章

  1. 吴渴楨 160809206
  2. 职业相关职位及职位能力要求知识点大纲范围
  3. 2345电脑管家_2345软件管家下载|2345软件管家 2.0 官方正式版
  4. Linux调优(文件系统)
  5. 切割图形_激光切割机氧气切碳钢板过烧怎么解决?这几点一定要注意!
  6. Windows Server 2016 RTM AVMA Keys
  7. excel 连接 mysql_Excel 数据库连接
  8. eclipse复制行快捷键与屏幕旋转冲突的解决
  9. VS Code:推荐插件 - HTML格式化(包括JS、CSS)
  10. 有道云笔记同步出错后,如何排查原因
  11. 20180102下结构体
  12. Yann Lecun 纽约大学Spring2020深度学习课程,附66页PPT下载
  13. JS中如何获取JSON子项的个数或叫length
  14. Java实现 藏宝架的宝物(分组DP,7.27阿里面试题)
  15. 微信小程序 request:fail url not in domain list
  16. 当前主流的python 微服务框架有哪些
  17. Pycharm 金融Python实战二:用Python编写一个金融计算器——编写函数 调用命令 实例年金现值 利率换算 净现值法 投资回报期 内部收益率及其法则(带程序和结果)
  18. orb_slam3实现保存/加载地图功能and发布位姿功能
  19. EDAS发布单工作原理及问题排查
  20. 结构 Structure

热门文章

  1. ilock计算机联锁系统应用,VPIILOCK型计算机联锁系统MMI操作手册V1.0.0
  2. UEFI源码解析之PROTOCOLHANDLE
  3. 获取二叉树叶子节点个数的递归及非递归算法
  4. 3D数据转换一站式解决方案CAD Exchanger软件介绍
  5. apache https反向代理设置方案
  6. ESP8266开发、ESP8266连接阿里云物联网、天猫精灵控制esp8266、esp8266一键配网、智能家居
  7. 【单片机期中测试】11.交通灯
  8. win2012安装SQLserver2012
  9. NLP自然语言处理系列-基于知识图谱的电影推荐实战
  10. 基于Python深度图生成3D点云