Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >网易云音乐歌曲下载

网易云音乐歌曲下载

作者头像
云雀叫了一整天
发布于 2019-09-29 09:59:41
发布于 2019-09-29 09:59:41
1.8K00
代码可运行
举报
文章被收录于专栏:Hi, PythonHi, Python
运行总次数:0
代码可运行

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_40313634/article/details/96611824

爬取过程中的问题解决

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
环境 :Windows + Python 3.7 + selenium

1. class 中含有空格,如何定位

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <div class="u-cover u-cover-1">
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    browser.find_elements_by_css_selector('[class = "u-cover u-cover-1"]')

2. 定位信息好着,就是获取不到元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
原因:
    selenium 打开网页后, 默认是在父级 Frame 里, 直接搜索是搜不到子 Frame 里的信息的。
    需要切换 Frame。
方法:
    switch_to.frame('frameid')
    switch_to.parent_frame()
  • 类似问题
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
原因:点击后,浏览器新打开了个选项卡。没有切换过来,导致还是在旧的选项卡里查找
解决:
    browser.switch_to_window(browser.window_handles[1])
  • 例子如下
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <iframe name="contentFrame" id="g_iframe" class="g-iframe" scrolling="auto" frameborder="0" src="about:blank" allowfullscreen="true"></iframe>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    browser.switch_to.frame('g_iframe')

3. find_elements后点击不了抓取的元素

  • 问题: for 循环执行第二次时报错如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
  • 代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    we_gedans = self.browser.find_elements_by_css_selector('[class = "u-cover u-cover-1"]')

    for we_gedan in we_gedans:
        we_gedan.click()
  • 原因
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
官方给出解释如下:
The element has been deleted entirely.
The element is no longer attached to the DOM.
就是页面元素过期,引用的元素过时,不再依附于当前页面,需要重新定位获取元素对象

find_elements 查找到的是 WebElement 类型的数组数据,含有元素在当前页面的地址信息,调用 click() 方法就是使用了此地址信息。
切换页面后,此地址信息就失效了。所以不能在直接在循环中调用 click()

4. eyed3 pip 安装成功, import报错

  • 报错如下
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 import magic
  File "C:\Users\zuoy\AppData\Local\Programs\Python\Python37\lib\site-packages\magic.py", line 181, in <module>
    raise ImportError('failed to find libmagic.  Check your installation')
ImportError: failed to find libmagic.  Check your installation
  • 原因: eyed3 依赖 magic,必须安装上这个才能使用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install pip install python-magic-bin
pip install eyed3

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python

'''
功能:访问网易云音乐网站,下载歌单里的所有免费歌曲
时间:2019/07/20
'''

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

import requests
import eyed3  # 给下载的MP3歌曲添加属性信息:专辑名、歌手等

import time
import json
import os

class Splider(object):
    def __init__(self):
        self.__url = 'https://music.163.com/'
        self.browser = webdriver.Chrome()

    def __get_gedans(self, url=None):
        gedans = []
        self.browser.get(self.__url)
        self.browser.switch_to.frame('g_iframe')
        we_gedans = self.browser.find_elements_by_css_selector('[class = "u-cover u-cover-1"]')
        for we_gedan in we_gedans:
            gedan = {}
            gedan = {
                'title': we_gedan.find_element_by_css_selector('a').get_attribute('title'),
                'url': we_gedan.find_element_by_css_selector('a').get_attribute('href'),
                'image': we_gedan.find_element_by_css_selector('img').get_attribute('src'),
                'click': we_gedan.find_element_by_css_selector('.nb').text
            }
            gedans.append(gedan)
        return gedans       

    def __get_songs(self, gedan):
        urls = []
        self.browser.get(gedan['url'])
        self.browser.switch_to.frame('g_iframe')
        we_songs = self.browser.find_elements_by_css_selector('[class = "even "]')
        for we_song in we_songs:
            url = {
                'id': we_song.find_element_by_css_selector('.left .hd span').get_attribute('data-res-id'),
                'name': we_song.find_element_by_css_selector('.f-cb b').get_attribute('title'),
                'songer': we_song.find_elements_by_css_selector('.text')[0].get_attribute('title'),
                'cd': we_song.find_elements_by_css_selector('.text')[1].find_element_by_css_selector('a').get_attribute('title')
            }
            # 清理掉其中的非显示字符
            for key, value in url.items():
                url[key] = ' '.join(value.split())
            urls.append(url)
        return urls

    def __download_song(self, song):
        base_url = "http://music.163.com/song/media/outer/url?id={0}"
        url = base_url.format(song['id'])
        re = requests.get(url)
        if re.status_code == 200:
            filename = song['name'] + '.mp3'
            with open(filename, 'wb') as f:
                f.write(re.content)
            at_song = eyed3.load(filename)
            at_song.tag.artist = song['songer']
            at_song.tag.album = song['cd']
            at_song.tag.title = song['name']
            at_song.tag.save()
            
        return

    def __save_json(self, strs, filename):
        filename = filename if os.path.splitext(filename)[1] == '.json' else os.path.splitext(filename)[0] + '.json'
        with open(filename, 'w', encoding='utf-8') as f:
            f.write(json.dumps(strs, indent=4, ensure_ascii=False))

    def __read_json(self, filename):
        data = []
        filename = filename if os.path.splitext(filename)[1] == '.json' else os.path.splitext(filename)[0] + '.json'
        with open(filename, 'r', encoding='utf-8') as f:
            data = json.loads(f.read())
        return data

    def run(self):
        gedans = self.__get_gedans()
        self.__save_json(gedans, 'gedans.json')
        for gedan in gedans:
            try:
                songs = self.__get_songs(gedan)
                self.__save_json(songs, 'songs.json')
            except Exception as e:
                print(e.args)
            os.chdir('songs')
            for song in songs:
                try:
                    self.__download_song(song)
                except Exception as e:
                    print(e.args)
            os.chdir('..')
        self.browser.close()


if __name__ == '__main__':
    splider = Splider()
    splider.run()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/07/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
对话摘要技术在美团的探索(SIGIR)
总第512篇 2022年 第029篇 随着互联网产生的文本数据越来越多,文本信息过载问题日益严重,对各类文本进行一个“降维”处理显得非常必要,而文本摘要就是其中一个重要的手段。 本文首先介绍了经典的文本摘要方法,随后分析了对话摘要的模型,并分享了美团在真实对话摘要场景中面临的挑战。同时基于实际的场景,本文提出了阅读理解的距离监督Span-Level对话摘要方案(已发表在SIGIR 2021),该方法比强基准方法在ROUGE-L指标和BLEU指标上提升了3%左右。 1. 对话摘要技术背景 2. 文本摘要与对
美团技术团队
2022/05/27
1.1K0
对话摘要技术在美团的探索(SIGIR)
【NLP】文本自动摘要任务的心得总结
由于最近需要进行组内的知识分享,因而借此机会将文本摘要的一些基本知识以及本人的一些实践经验做成文稿,一方面用来组内分享,一方面也是总结一下过去在该领域的一些心得体会。因个人的能力所限,本文实质上是对文本摘要的不完全总结,如有未能囊括的知识点,还请同学们多提意见,一起进步。
yuquanle
2019/11/14
4.4K0
【NLP】文本自动摘要任务的心得总结
CopyNet、SeqGAN、BERTSUM…你都掌握了吗?一文总结文本摘要必备经典模型(一)
机器之心专栏 本专栏由机器之心SOTA!模型资源站出品,每周日于机器之心公众号持续更新。 本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过 SOTA 的经典模型逐一详解。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。 本文将分 2 期进行连载,共介绍 17 个在文本摘要任务上曾取得 SOTA 的经典模型。 第 1 期:CopyNet、SummaRuNNer、SeqGAN、Latent Ex
机器之心
2022/10/10
1.6K0
CopyNet、SeqGAN、BERTSUM…你都掌握了吗?一文总结文本摘要必备经典模型(一)
huggingface transformers实战系列-06_文本摘要
随着互联网产生的文本数据越来越多,文本信息过载问题日益严重,对各类文本进行一个“降 维”处理显得非常必要,文本摘要便是其中一个重要的手段。文本摘要旨在将文本或文本集合转换为包含关键信息的简短摘要。文本摘要按照输入类型可分为单文档摘要和多文档摘要。单文档摘要从给定的一个文档中生成摘要,多文档摘要从给定的一组主题相关的文档中生成摘要。按照输出类型可分为抽取式摘要和生成式摘要。抽取式摘要从源文档中抽取关键句和关键词组成摘要,摘要全部来源于原文。生成式摘要根据原文,允许生成新的词语、短语来组成摘要。按照有无监督数据可以分为有监督摘要和无监督摘要。本文主要关注单文档、有监督、抽取式、生成式摘要
致Great
2023/08/25
8550
huggingface transformers实战系列-06_文本摘要
Text Summarization文本摘要与注意力机制
自动文本摘要是在保持关键信息内容和整体含义的同时,生成简洁流畅的摘要的任务。 文本摘要目前大致可以分为抽取式与生成式两种类型:
深度学习视觉
2020/03/29
1.5K0
Text Summarization文本摘要与注意力机制
当深度学习遇见自动文本摘要
本文介绍了深度神经网络在自动文本摘要任务中的研究进展。首先介绍了自动文本摘要任务的基本概念,然后详细阐述了基于深度神经网络的自动文本摘要方法,包括基于抽取式摘要和基于生成式摘要的方法。最后,文章对自动文本摘要方法的未来发展方向进行了探讨。
腾讯云开发者社区
2017/07/25
11.4K2
当深度学习遇见自动文本摘要
一个Python自动提取内容摘要的实践
利用计算机将大量的文本进行处理,产生简洁、精炼内容的过程就是文本摘要,人们可通过阅读摘要来把握文本主要内容,这不仅大大节省时间,更提高阅读效率。但人工摘要耗时又耗力,已不能满足日益增长的信息需求,因此借助计算机进行文本处理的自动文摘应运而生。近年来,自动摘要、信息检索、信息过滤、机器识别、等研究已成为了人们关注的热点。
IT派
2018/07/30
2K0
一个Python自动提取内容摘要的实践
斯坦福NLP课程 | 第15讲 - NLP文本生成任务
ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!视频和课件等资料的获取方式见文末。
ShowMeAI
2022/05/20
1.2K0
斯坦福NLP课程 | 第15讲 - NLP文本生成任务
ACL2019论文阅读笔记——基于单句和双句打分的生成式摘要
论文Scoring Sentence Singletons and Pairs for Abstractive Summarization发表于2019年自然语言处理顶级会议ACL,本文将对其进行详细解读,这是原文链接(https://arxiv.org/pdf/1906.00077.pdf),此外作者还公布了论文代码。
linhw
2020/03/27
7560
指针生成网络(Pointer-Generator-Network)原理与实战
本文主要内容:介绍Pointer-Generator-Network在文本摘要任务中的背景,模型架构与原理、在中英文数据集上实战效果与评估,最后得出结论。参考的《Get To The Point: Summarization with Pointer-Generator Networks》以及多篇博客均在文末给出连接,文中使用数据集已上传百度网盘,代码已传至GitHub,读者可以在文中找到相应连接,实际操作过程中确实遇到很多坑,并未在文中一一指明,有兴趣的读者可以留言一起交流。由于水平有限,请读者多多指正。
用户1432189
2019/09/27
2.7K0
指针生成网络(Pointer-Generator-Network)原理与实战
人工智能之文本摘要自动生成
当我们点开某个网站或某个新闻APP的时候,经常能看到这样的题目:“14亿人都不知道的真相,历史的血泪……”、“删前速看!XXX视频流出”等,可是当我们点进去的时候,往往会发现,都是标题党,文章和内容完全不符合! 如果这时候有一种工具能先替我们阅读新闻,再提炼出关键内容,那么我们肯定不会再受到标题党的影响,这对我们的生活无疑会有非常大的便利。而这需要的就是“文本摘要自动生成”技术! 文本摘要充斥着我们生活的方方面面,往小了说,新闻关键词的提炼是文本摘要;往宽泛看,文本摘要也可以应用在像Google、百度等搜索
企鹅号小编
2018/01/11
3.6K0
人工智能之文本摘要自动生成
深度解析NLP文本摘要技术:详解与实战
文本摘要是自然语言处理(NLP)的一个重要分支,其核心目的是提取文本中的关键信息,生成简短、凝练的内容摘要。这不仅有助于用户快速获取信息,还能有效地组织和归纳大量的文本数据。
TechLead
2023/10/21
3K0
深度解析NLP文本摘要技术:详解与实战
大众点评信息流基于文本生成的创意优化实践
信息流是目前大众点评除搜索之外的第二大用户获取信息的入口,以优质内容来辅助用户消费决策并引导发现品质生活。整个大众点评信息流(下文简称点评信息流)围绕个性化推荐去连接用户和信息,把更好的内容推荐给需要的用户。信息流推荐系统涉及内容挖掘、召回、精排、重排、创意等多层机制和排序。本文主要围绕创意部分的工作展开,并选取其中重要的文本创意优化做介绍,分为三个部分:第一部分阐述几个重点问题,包括创意优化是什么,为什么做,以及挑战在哪里;第二部分讲述领域内的应用及技术进展;第三部分介绍我们创意优化的实践,最后做个总结。
程序员小强
2019/06/02
6810
Paper | ACL2018 抽取式摘要之 NEUSUM
论文题目:Neural Document Summarization by Jointly Learning to Score and Select Sentences.
用户3946442
2022/04/11
3210
Paper | ACL2018 抽取式摘要之 NEUSUM
大众点评信息流基于文本生成的创意优化实践
美美导读:对于用户来说,大众点评最重要的价值是提供丰富多元化的信息,其中信息流的价值日益凸显。本文主要介绍大众点评信息流内容团队利用文本生成技术在创意优化方向上的一些思考和实践。
美团技术团队
2019/03/21
1.1K0
大众点评信息流基于文本生成的创意优化实践
文本生成魔改方案汇总!
文本生成是NLP中较难的点,应用场景多且广泛。本篇笔记录一下文本生成的应用场景和主流方案,主要是基础的学习汇总和解决方案的梳理,相关学习资料在文中有链接或者文末有参考文献(我人工筛选的)都是相对经典的。
zenRRan
2021/01/04
2K0
文本生成魔改方案汇总!
四万字全面详解 | 深度学习中的注意力机制(三)
目前深度学习中热点之一就是注意力机制(Attention Mechanisms)。Attention源于人类视觉系统,当人类观察外界事物的时候,一般不会把事物当成一个整体去看,往往倾向于根据需要选择性的去获取被观察事物的某些重要部分,比如我们看到一个人时,往往先Attend到这个人的脸,然后再把不同区域的信息组合起来,形成一个对被观察事物的整体印象。
NewBeeNLP
2020/11/24
1.7K0
四万字全面详解 | 深度学习中的注意力机制(三)
NLP任务之中文拼写 语法纠错 介绍与综述
在很多中文NLP相关的落地场景都会涉及到文本纠错的相关技术,例如跟各种形式机器人的语音或者文字对话,或者用手机扫描相关的PDF或者图片,或者跟人聊天时用输入法打字等等,无论是通过ASR识别的语音信息,通过OCR识别得到的图片信息,还是用户真实通过输入法的文字,都有可能出现错误。这些错误会影响文本的可读性,不利于人和机器的理解,如果这些错误不加处理,会传播到后续的环节,影响后续任务的效果。常见的中文错误类型包括以下几种:
大鹅
2022/07/20
4.3K1
独家 | Python利用深度学习进行文本摘要的综合指南(附教程)
本文介绍了如何利用seq2seq来建立一个文本摘要模型,以及其中的注意力机制。并利用Keras搭建编写了一个完整的模型代码。
数据派THU
2019/07/17
2.4K0
独家 | Python利用深度学习进行文本摘要的综合指南(附教程)
NLP中自动生产文摘(auto text summarization)
最近几年在人工智能领域中大热的工程技术deep learning,将机器对图像,语音,人类语言的认知能力都提升了不少,前前后后也涌现出不少不仅仅是很cool而且是非常实用的应用,比如人脸识别,猫脸识别,无人车,语义搜索等等。其中,深度学习技术对图像和语音的影响最大,但对人类语言的理解(NLP)做的没有那么那么好。所以,不必太过鼓吹人工智能将会如何如何,民众的期待不应太过接近科幻电影,不然只能换来无尽的失望,从而导致寒冬的来临。 However, I would encourage everyone to t
机器学习AI算法工程
2018/03/15
2.8K0
NLP中自动生产文摘(auto text summarization)
推荐阅读
相关推荐
对话摘要技术在美团的探索(SIGIR)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验