16.ajax_case09
时间:2022-07-25
本文章向大家介绍16.ajax_case09,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
import requests
import json
import re
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from multiprocessing import Pool
def download_music(songmid, music_name):
url = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=872989112&jsonpCallback=MusicJsonCallback06459212607938936&loginUin=11297258&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback06459212607938936&uin=11297258&songmid={0}&filename=C100{0}.m4a&guid=9136027940'.format(
songmid)
html = requests.get(url)
# 去掉jsonp
music_json = json.loads(re.findall(r'^w+((.*))$', html.text)[0])
filename = music_json['data']['items'][0]['filename']
vkey = music_json['data']['items'][0]['vkey']
download_url = 'http://dl.stream.qqmusic.qq.com/{}?vkey={}&fromtag=66'.format(
filename, vkey)
print(download_url)
# 下载到本地
music = requests.get(download_url)
# 文件名去除特殊符号
with open("d:\music\{}.m4a".format(re.sub(r'[s+|@<>:\"/]', '', music_name)), "wb") as m:
m.write(music.content)
def view_html():
# qq音乐页面是js加载的,这里用chrome headless模式访问
option = webdriver.ChromeOptions()
option.add_argument('headless')
driver = webdriver.Chrome(
r'D:Program FilesPythonchromedriver.exe',
chrome_options=option)
# 排行榜页面
driver.get('https://y.qq.com/n/yqq/toplist/26.html')
print(driver.title)
try:
# 等待播放列表加载完毕
WebDriverWait(
driver, 10).until(
EC.presence_of_element_located(
(By.CLASS_NAME, "songlist__songname_txt")))
lis = driver.find_elements_by_class_name('songlist__songname_txt')
pattern = re.compile(r'https://y.qq.com/n/yqq/song/(S+).html')
for i in range(lis.__len__()):
li = lis.__getitem__(i)
a = li.find_element_by_class_name('js_song')
# 获得songid
href = a.get_attribute('href')
music_name = a.get_attribute('title')
m = pattern.match(href)
download_music(m.group(1), music_name)
finally:
driver.quit()
if __name__ == '__main__':
view_html()
- dependencies与devDependencies的区别
- [先行者课程] -- 用js实现倒计时功能的业务逻辑
- iOS如何实现多个环境一次打包
- 从原理到策略算法再到架构产品看推荐系统 | 附Spark实践案例
- MobX 在 React Native开发中的应用
- RCTEventEmitter使用
- Google V8 引擎
- 揭秘前端字符的戏精之路
- 跨语言嵌入模型的调查
- React Native如何消除启动时白屏
- 如何在Python中将TimeDistributed层用于Long Short-Term Memory Networks
- react native 调用原生UI组件
- Android侧滑删除另一种实现,SwipeListView补充
- React Native调用原生组件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法