zoukankan      html  css  js  c++  java
  • 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()
    
  • 相关阅读:
    java fastjson 设置全局输出name最小化
    Spring MVC同一方法返回JSON/XML格式
    使用Vuejs编写单js组件
    iview使用vue-i18n实现国际化
    WPF usercontrol 自定义依赖属性
    正在尝试解析依赖项“MvvmLightLibs (≥ 5.2.0.0)”。 “MvvmLightLibs”已拥有为“CommonServiceLocator”定义的依赖项
    记第一次的破解经历
    HTML5实现手机QQ表情功能
    TypeScript 基本语法
    WebStorm下使用TypeScript
  • 原文地址:https://www.cnblogs.com/hankleo/p/10807678.html
Copyright © 2011-2022 走看看