手把手教你用Python网络爬虫获取网易云音乐歌曲

前天给大家分享了用Python网络爬虫爬取了网易云歌词,在文尾说要爬取网易云歌曲,今天小编带大家一起来利用Python爬取网易云音乐,分分钟将网站上的音乐down到本地。

跟着小编运行过代码的筒子们将网易云歌词抓取下来已经不再话下了,在抓取歌词的时候在函数中传入了歌手ID和歌曲名两个参数,其实爬取歌曲也是同样的道理,也需要传入这两个参数,只不过网易云歌曲的URL一般人找不到。不过也不要慌,有小编在,分分钟扫除您的烦恼。

网易云歌曲一般会有一个外链,专门用于下载音乐音频的,以赵雷的歌曲《成都》为例,《成都》的外链URL是:

http://music.163.com/song/media/outer/url?id=436514312.mp3,其中436514312这个数字是《成都》这首歌曲的ID。也就是说只要我们将歌曲的ID传入到外链URL中,就可以找到该歌曲的下载地址,之后通过Python标准库进行下载即可。

话不多说,直接上代码:

手把手教你用Python网络爬虫获取网易云音乐歌曲

程序设计好之后,运行程序,输入歌手的ID,以赵雷为例,其ID是6731,输入这个ID数值之后,程序将自动将赵雷的专辑歌曲及其对应的歌词下载到本地,运行的效果图如下所示:

手把手教你用Python网络爬虫获取网易云音乐歌曲

程序运行完毕之后,歌词和歌曲都down到本地了,如下图:

手把手教你用Python网络爬虫获取网易云音乐歌曲
手把手教你用Python网络爬虫获取网易云音乐歌曲

之后在本地便可以听到优雅的歌曲了,如《成都》,见下图:

手把手教你用Python网络爬虫获取网易云音乐歌曲

大家以后要听歌曲的话只要运行这个爬虫程序,输入你喜欢的那位歌手的ID,稍等片刻,就可以听到你想要的歌曲啦10万首歌曲就不在话下啦,只要你愿意,随便多少首都行

最后小编祝福大家身体健康,工作顺利~~欢迎大家转载噢

今天这个程序完整的代码截图可以参考小编前天分享的那篇基于Python网易云音乐歌词爬取文章,结合今天的代码,就可以如愿以偿啦~~~

——————- End ——————-

往期精彩文章推荐:

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他

手把手教你爬取天堂网1920*1080大图片(批量下载)——实战篇

/1 前言/

    上篇文章我们谈及了天堂网站图片抓取的理论,这篇文章将针对上篇文章的未尽事宜进行完善,完成图片的批量抓取。

 

/2 图片网址解析/

    1. 我们首先来分析一下这个图片的地址在哪里。我们选择图片,然后右击网页检查,可以看到图片的路径,如下图所示。

 

2. 将其单独放出来,如下图所示。

3. 可以看到<a href>就是图片的链接,而src就图片的地址,所以我们可以找它的上一级标签<ul>。如果再找不到那就再找上一级以此类推(找到越详细内容更准确)。使用选择器xpath,获取到src的值(网址后缀)之后,将后缀加上“https前缀”就可以得到每一个网址,如下图所示:

 

4. 之后尝试运行,如下图所示,可以获取到具体的网址。

 

5. 我们再对这个网址进行请求(参考一个请求的方法)分析数据。

 

6. 我们以这个鱼的图片为例,点击它来到二级页面。

 

7. 右键检查 可以看到我们要获取的是src的地址,如下图所示。

 

8. 获取图片的源码,如下图所示。

 

9. Xpath 获取到路径,为了方便区分图片的名字,如下图所示。

 

/3 下载图片/

    1. 为方便储存,新建一个filename来作为保存的路径,如下图所示。

 

2. 也就是说你需要在Python代码的同级目录,提前新建一个文件夹,名叫“天堂网爬的图片”,如果没有这个文件夹的话,将会报下图的错。

3. 使用with函数进行文件的打开和写入,下方代码的含义是创建一个文件,代码框里边有具体的注释。

"wb" # 意思是以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
"as f" # 意思是写入一个叫f的文件。
"f.wirite(html)" # 意思是说把html的内容写入f这个文件。

 

4. 下面是各个编码代表的含义,可以学习一下。

 

5. 基于以上代码,基本上就可实现批量下载。接下来,我们继续优化一下。我们导入一个叫fake_useragent的库 fake_useragent第三方库,来实现随机请求头的设置。

fromfake_useragent import UserAgent 
ua =UserAgent()print(ua.ie)   #随机打印ie浏览器任意版本
print(ua.firefox)# 随机打印firefox浏览器任意版本
print(ua.chrome)  # 随机打印chrome浏览器任意版本
print(ua.random)  #随机打印任意厂家的浏览器

6. 我们可以再初始化init方法,添加ua.random,让它随机的产生;其中UserAgent代码如图:(这里设置随机产生50个挑选其中一个进行请求)

 

7. 最终实现的效果图,终端显示如下图所示。

8. 将图片自动下载到本地后的效果图,高清的噢~

9. 至此,针对解析出来的图片地址予以批量下载的任务已经完成,接下来自己可以开心的去浏览图片啦。

10. 不建议大家爬取太多数据,这样会给服务器增大负载,浅尝辄止即可。

 

/4 小结/

    本文基于理论篇,通过Python 中的爬虫库 requests 、lxmlfake_useragent,带大家进行网页结构的分析以及网页图片地址数据的提取,并且针对解析出来的图片地址予以批量下载,方法行之有效,欢迎大家积极尝试。

如果需要本文源码的话,请在公众号后台回复“高清图片”四个字进行获取,觉得不错,记得给个star噢。

——————- End ——————-

往期精彩文章推荐:

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他

手把手教你爬取天堂网1920*1080大图片(批量下载)——理论篇

/1 前言/

平时我们要下载图片,要要一个一个点击下载是不是觉得很麻烦?那有没有更加简便的方法呢?答案是肯定的,这里我们以天堂网为例,批量下载天堂网的图片。

 

/2 项目准备工作/

首先 我们第一步我们要安装一个pycham的软件。可以参考这篇文章:Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

天堂网的网址:

https://www.ivsky.com/bizhi/1920x1080/

我们需要下载几个库,怎么下载呢?打开pycharm,依次点击File,再点开Settings,如下图所示。

打开后会出现这个界面点击你的项目名字(project:(你的项目名字)),之后在project interpreter下,点击加号,而后下载我们需要的库。

本项目需要用到的是库是requests、lxml、fake_useragent,如下图所示。fake_useragent一般是没有的,需要通过下面的命令进行安装:

pip install fake_useragent

 

/3 项目实现/

1、导入需要的库(requests,lxml, fake_useragent)。

2、我用了封装方法去实现各个部分的功能。首先要写一个框架:构造一个类TianTangWebsite ,然后定义一个init方法里继承(self),再定义一个主方法(main)。最后实现这个main方法,依次一步一步进行实现。

3、我们把天堂网的网址拿过来,构造请求头。这里说一下这个UserAgent的获取方法。在打开天堂网的网站后,按下键盘上的F12键,之后会进入到开发者模式,之后点开network,如下图所示。

4、而后随便点击一个name,复制header里边的UserAgent就可以了。

5、我们点击下一页的地址观察网址的变化,如下所示:

https://www.ivsky.com/bizhi/1920x1080/index_2.html
https://www.ivsky.com/bizhi/1920x1080/index_3.html
https://www.ivsky.com/bizhi/1920x1080/index_4.html

很明显的发现,这个网址的网页数字一直在变化。我们可以用格式化{}去代替变化的值,类似这样:

https://www.ivsky.com/bizhi/1920x1080/index_{}.html

6、然后我们用for循环去遍历这些网址,代码如下所示:

def main(self):
    for i in range(1,2):#页数随机客户随便 设置
      url=self.url.format(i)
      print(url)

7、我们定义这个get_home()方法去请求到这个网址。

9、我们需要解析得到的数据,接下来定义一个xiap的方法,拿到我们请求的网址。接下来就是该项目的关键了。

10、至此,针对反爬虫的措施我们已经提前做好了准备,下一步将进行网页结构的分析以及网页图片地址数据的提取,并针对解析出来的图片地址予以批量下载,具体实现咱们下篇文章进行详解。

 

/4 小结/

本文主要内容为对图片网站进行了基本简介,基于 Python 中的爬虫库 requestslxmlfake_useragent,提前部署了请求头,模拟浏览器,针对反爬虫的措施我们已经提前做好了准备。

下篇文章将带大家进行网页结构的分析以及网页图片地址数据的提取,并针对解析出来的图片地址予以批量下载,敬请期待~~

往期精彩文章推荐:

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他

手把手教你使用Python爬取西刺代理数据(下篇)

/1 前言/

前几天小编发布了手把手教你使用Python爬取西次代理数据(上篇),图片描述木有赶上车的小伙伴,可以戳进去看看。今天小编带大家进行网页结构的分析以及网页数据的提取,具体步骤如下。

 

/2 首页分析及提取/

首先进入网站主页,如下图所示。
图片描述

简单分析下页面,其中后面的 1 是页码的意思,分析后发现每一页有100 多条数据,然后网站底部总共有 2700+页 的链接,所以总共ip 代理加起来超过 27 万条数据,但是后面的数据大部分都是很多年前的数据了,比如 2012 年,大概就前 5000 多条是最近一个月的,所以决定爬取前面100 页。通 过网站 url 分析,可以知道这 100 页的 url 为:
图片描述

规律显而易见,在程序中,我们使用一个 for 循环即可完整这个操作:
图片描述

其中 scrapy 函数是爬取的主要逻辑,对应的代码为:
图片描述

通过这个方式,我们可以得到每一页的数据。

 

/3 网页元素分析及提取/

接下来就是对页面内的元素进行分析,提取其中的代理信息。
图片描述

如上图,我们目的是进行代理地域分布分析,同时,在爬取过程中需要使用爬取的数据进行代 理更新,所以需要以下几个字段的信息:

Ip 地址、端口、服务器位置、类型

为此,先构建一个类,用于保存这些信息:
图片描述

这样,每爬取一条信息,只要实例化一个 ProxyBean 类即可,非常方便。

接下来就是提取元素过程了,在这个过程我使用了正则表达式和 BeautifulSoup 库进行关键数据提取。

首先,通过分析网页发现,所有的条目实际上都是放在一个<table>标签中。
图片描述

该便签内容如下:
<table id="ip_list">……</table>
我们首先通过正则表达式将该标签的内容提取出来:
正则表达式为:
<table id="ip_list">([\S\s]*)</table>
, 表示搜索
<table id="ip_list">

</table>
之 间的任意字符组成的数据。Python 中的实现如下:
图片描述

其中得到的 data 就是这个标签的内容了。下面进一步分析。

进入到 table 中,发现每一个代理分别站 table 的一列,但是这些标签分为两类,一 类包含属性 class=“odd”, 另一类不包含。
图片描述

这个时候,可以使用 BeautifulSoup 对标签进行提取:
图片描述

通过这种方式,就能获取到每一个列的列表了。

接下来就是从每个列中获取 ip、端口、位置、类型等信息了。进一步分析页面:

1、IP 字段:
图片描述

我们使用正则表达式对 IP 进行解析,IP 正则如下:

** (2[0-5]{2}|[0-1]?\d{1,2})(.(2[0-5]{2}|[0-1]?\d{1,2})){3}**
图片描述

2、 端口字段
图片描述

端口由包裹,并且中间全部是数字,故可构造如下正则进行提取:

<td>([0-9]+)</td>

图片描述

3、 位置字段

位置字段如下:
图片描述

由 便签包裹,构造如下正则即可提取:
<a href="([>]*)>([<]*)</a>
图片描述

4、类型字段

类型字段如下:
图片描述

由包裹,中间为字母,构造正则如下:

<td>([A-Za-z]+)</td>
图片描述

数据全部获取完之后,将其保存到文件中即可:
图片描述

最后爬取的数据集如下图所示:
图片描述

此次总共爬取了前面 5300 多条数据。

 

/4 小结/

本次任务主要爬取了代理网站上的代理数据。主要做了以下方面的工作:

1、学习 requests 库的使用以及爬虫程序的编写;

2、学习使用反爬虫技术手段,并在实际应用中应用这些技术,如代理池技术;

3、学习使用正则表达式,并通过正则表达式进行网页元素提取;

4、学习使用 beautifulsoup 库,并使用该库进行网页元素的提取。

Python爬虫是一项综合技能,在爬取网站的过程中能够学到很多知识,希望大家多多专研,需要代码的小伙伴,可以在[Python爬虫与数据挖掘]公众号后台回复“代理”二字,即可获取。

想学习更多关于Python的知识,可以参考Python爬虫与数据挖掘网站:http://pdcfighting.com/

——————- End ——————-

往期精彩文章推荐:

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他

手把手教你使用Python爬取西刺代理数据(上篇)

/1 前言/

细心的小伙伴应该知道上次小编发布了一篇关于IP代理的文章,基于Python网络爬虫技术,主要介绍了去IP代理网站上抓取可用IP,并且Python脚本实现验证IP地址的时效性,如遇到爬虫被禁的情况就可以用文章中的办法进行解决。如果没有来得及上车的小伙伴,可以戳这篇文章看看:手把手教你用免费代理ip爬数据

接下来小编要推出的三篇文章,分别从代理网站的介绍和反爬措施介绍、数据抓取、数据可视化操作三方面进行展开,各个方面独占一文,希望对大家的学习有帮助。接下来小编先介绍代理网站及其反爬措施。

 

/2 简介/

西次代理网站是国内收录国内代理的网站,实时数量达到数十万条,上面有很多的代理IP,有的是免费的,有的是付费的。免费的一般是不可用的,即便当时好用,但是也挺不了多久,就会凉凉。

 

/3 反爬虫措施/

本文主要内容为使用 Python 对该网站数据进行爬取,其中爬虫主要利用 requests 库,下面先针对反爬虫措施进行简介。

经过前期测试时发现,该网站反爬虫处理措施很多,测试到有以下几个:

1、直接使用** requests** 库,在不设置任何 header 的情况下,网站直接不返回数据。

2、同一个 ip 连续访问 40 多次,直接封掉 ip,起初我的** ip** 就是这样被封掉的。

为了解决这两个问题,最后经过研究,使用以下方法,可以有效解决:

3、通过抓取正常网络流量,获取正常的 http 请求头(header),并在 requests 请求时设置这些常规的 http 请求头,这样的目的是让目标网站认为我们发出的请求是正常通过浏览器发起而非使用程序自动发起的。这样就可以解决第一个痛点。

4、构建代理池,首先从其他网站获取一批初始代理,利用这些代理在爬取该网站的代理数 据时将爬取到的代理实时加入进来,每次爬取时随机选择一个代理池中的代理,同时,及时将那些失效或者被封的代理移出代理池。这样,我们就不用担心一个ip用久了就被封掉。

为了正常的获取 http 请求头,使用抓包工具 Fiddler 对正常浏览器访问该网站的数据包进行抓取,如图:

提取数据之后,将该数据封装成 requests 库可以识别的 header 字典, 供其调用,这样通过使用正常的数据包,我们就不用担心网站使用头部校验了。在代码中,专门定义一个函数,只需要调用该函数就可以得到该字典:

然后在 requests 请求网站的时候, 设置这个头部即可, 代码如下:

至此,针对反爬虫的措施我们已经提前做好了准备,下一步将进行网页结构的分析以及网页数据的提取,具体实现咱们下篇文章进行详解。

 

/4 小结/

本文主要内容为对代理网站进行了基本简介,而后对代理网站的反爬虫措施进行简介。之后使用抓包工具 Fiddler 对该网站的数据包进行抓取,基于 Python 中的爬虫库 requests ,提前部署了请求头,模拟浏览器。下篇文章将带大家进行网页结构的分析以及网页数据的提取,敬请期待~~

——————- End ——————-

往期精彩文章推荐:

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他

手把手教你使用Python抓取QQ音乐数据(第四弹)

【一、项目目标】

通过手把手教你使用Python抓取QQ音乐数据(第一弹)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名、专辑名、播放链接。

通过手把手教你使用Python抓取QQ音乐数据(第二弹)我们实现了获取 QQ 音乐指定歌曲的歌词和指定歌曲首页热评。

通过手把手教你使用Python抓取QQ音乐数据(第三弹)我们实现了获取更多评论并生成词云图。

此次我们将将三个项目封装在一起,通过菜单控制爬取不同数据。

 

【二、需要的库】

主要涉及的库有:requests、openpyxl、html、json、wordcloud、jieba

如需更换词云图背景图片还需要numpy库和PIL库(pipinstall pillow)

如需生成.exe需要pyinstaller -F

 

【三、项目实现】

1.首先确定菜单,要实现哪些功能:

①获取指定歌手的歌曲信息(歌名、专辑、链接)

②获取指定歌曲歌词

③获取指定歌曲评论

④生成词云图

⑤退出系统

代码如下:

class QQ():
    def menu(self):
        print('欢迎使用QQ音乐爬虫系统,以下是功能菜单,请选择。\n')
        while True:
            try:
                print('功能菜单\n1.获取指定歌手的歌曲信息\n2.获取指定歌曲歌词\n3.获取指定歌曲评论\n4.生成词云图\n5.退出系统\n')
                choice = int(input('请输入数字选择对应的功能:'))
                if choice == 1:
                    self.get_info()
                elif choice == 2:
                    self.get_id()
                    self.get_lyric()
                elif choice == 3:
                    self.get_id()
                    self.get_comment()
                elif choice == 4:
                    self.wordcloud()
                elif choice == 5:
                    print('感谢使用!')
                    break
                else:
                    print('输入错误,请重新输入。\n')
            except:
                print('输入错误,请重新输入。\n')  

第一行创建类,第二行定义菜单函数,这里用了类的实例化,里面所有函数的第一个参数都是self,我认为实例化更方便传参数;

whiletrue使菜单无限循环;

Try…except…使循环不会因报错而退出;

其他代码为设置输入不同数字对应打开不同函数。

2.封装项目(一)为get_info()

代码如下:

def get_info(self):
        wb=openpyxl.Workbook()  
        #创建工作薄
        sheet=wb.active 
        #获取工作薄的活动表
        sheet.title='song' 
        #工作表重命名
 
        sheet['A1'] ='歌曲名'     #加表头,给A1单元格赋值
        sheet['B1'] ='所属专辑'   #加表头,给B1单元格赋值
        sheet['C1'] ='播放链接'   #加表头,给C1单元格赋值
        url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
        name = input('请输入要查询的歌手姓名:')
        page = int(input('请输入需要查询的歌曲页数:'))
        for x in range(page):
            params = {
            'ct':'24',
            'qqmusic_ver': '1298',
            'new_json':'1',
            'remoteplace':'sizer.yqq.song_next',
            'searchid':'64405487069162918',
            't':'0',
            'aggr':'1',
            'cr':'1',
            'catZhida':'1',
            'lossless':'0',
            'flag_qc':'0',
            'p':str(x+1),
            'n':'20',
            'w':name,
            'g_tk':'5381',
            'loginUin':'0',
            'hostUin':'0',
            'format':'json',
            'inCharset':'utf8',
            'outCharset':'utf-8',
            'notice':'0',
            'platform':'yqq.json',
            'needNewCode':'0'    
            }
            res = requests.get(url,params=params)
            json = res.json()
            list = json['data']['song']['list']
            for music in list:
                song_name = music['name']
                # 查找歌曲名,把歌曲名赋值给song_name
                album = music['album']['name']
                # 查找专辑名,把专辑名赋给album
                link = 'https://y.qq.com/n/yqq/song/' + str(music['mid']) + '.html\n\n'
                # 查找播放链接,把链接赋值给link
                sheet.append([song_name,album,link])
                # 把name、album和link写成列表,用append函数多行写入Excel
                
        wb.save(name+'个人单曲排行前'+str(page*20)+'清单.xlsx')            
        #最后保存并命名这个Excel文件
        print('下载成功!\n')

3.封装项目(二)为get_id()和get_lyric

代码如下:

def get_id(self):
        self.i = input('请输入歌曲名:')
        url_1 = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
        # 这是请求歌曲评论的url
        headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
        params = {'ct': '24', 'qqmusic_ver': '1298', 'new_json': '1', 'remoteplace': 'txt.yqq.song', 'searchid': '71600317520820180', 't': '0', 'aggr': '1', 'cr': '1', 'catZhida': '1', 'lossless': '0', 'flag_qc': '0', 'p': '1', 'n': '10', 'w': self.i, 'g_tk': '5381', 'loginUin': '0', 'hostUin': '0', 'format': 'json', 'inCharset': 'utf8', 'outCharset': 'utf-8', 'notice': '0', 'platform': 'yqq.json', 'needNewCode': '0'}  
        res_music = requests.get(url_1,headers=headers,params=params)
        json_music = res_music.json()
        self.id = json_music['data']['song']['list'][0]['id']
        # print(self.id)
 
    def get_lyric(self):
        url_2 = 'https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_yqq.fcg'
        # 这是请求歌曲评论的url
        headers = {
        'origin':'https://y.qq.com',
        'referer':'https://y.qq.com/n/yqq/song/001qvvgF38HVc4.html',
        'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
        params = {
            'nobase64':'1',
            'musicid':self.id,
            '-':'jsonp1',
            'g_tk':'5381',
            'loginUin':'0',
            'hostUin':'0',
            'format':'json',
            'inCharset':'utf8',
            'outCharset':'utf-8',
            'notice':'0',
            'platform':'yqq.json',
            'needNewCode':'0',
            }
        res_music = requests.get(url_2,headers=headers,params=params)
        js_1 = res_music.json()
        lyric = js_1['lyric']
        lyric_html = html.unescape(lyric)   #用了转义字符html.unescape方法
        # print(lyric_html)
        f1 = open(self.i+'歌词.txt','a',encoding='utf-8')    #存储到txt中
        f1.writelines(lyric_html)
        f1.close()
        print('下载成功!\n')

这里特别说一下下载歌词的headers里必须加上’origin’和’referer’,要不爬下来数据。

4.封装项目(三)为get_comment()和wordcloud()

代码如下:

def get_comment(self):
        page = input('请输入要下载的评论页数:')
        url_3 = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg'
        headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
        f2 = open(self.i+'评论.txt','a',encoding='utf-8')    #存储到txt中
        for n in range(int(page)):
            params = {'g_tk_new_20200303': '5381', 'g_tk': '5381', 'loginUin': '0', 'hostUin': '0', 'format': 'json', 'inCharset': 'utf8', 'outCharset': 'GB2312', 'notice': '0', 'platform': 'yqq.json', 'needNewCode': '0', 'cid': '205360772', 'reqtype': '2', 'biztype': '1', 'topid': self.id, 'cmd': '6', 'needmusiccrit': '0', 'pagenum':n, 'pagesize': '15', 'lasthotcommentid':'', 'domain': 'qq.com', 'ct': '24', 'cv': '10101010'}
            res_music = requests.get(url_3,headers=headers,params=params)
            js_2 = res_music.json()
            comments = js_2['comment']['commentlist']
            for i in comments:
                comment = i['rootcommentcontent'] + '\n——————————————————————————————————\n'
                f2.writelines(comment)
            # print(comment)
        f2.close()
        print('下载成功!\n')
 
    def wordcloud(self):
        self.name = input('请输入要生成词云图的文件名称:')
        def cut(text):
            wordlist_jieba=jieba.cut(text)
            space_wordlist=" ".join(wordlist_jieba)
            return space_wordlist
        with open(self.name+".txt" ,encoding="utf-8")as file:
            text=file.read()
            text=cut(text)
            mask_pic=numpy.array(Image.open("心.png"))
            wordcloud = WordCloud(font_path="C:/Windows/Fonts/simfang.ttf",
            collocations=False,
            max_words= 100,
            min_font_size=10, 
            max_font_size=500,
            mask=mask_pic).generate(text)
            wordcloud.to_file(self.name+'云词图.png')  # 把词云保存下来 
        print('生成成功!\n')

5.最后类的实例化

qq = QQ()
qq.menu()

6.效果展示

image
image
image
image
image
image
image
image
image
image

7. 打包成.exe

用pyinstaller -F打包,运行会报错、闪退。

image

看上图报错信息应该和词云图有关,注释掉词云图所需的库,def wordcloud()按下图修改可正常打包,但是就没有生成词云图的功能了:

image
image
image

下载歌词或评论时,如有重名的歌曲,可在歌曲前面加上歌手姓名,如上图的“邓紫棋泡沫”。

 

【四、总结】

1.项目四对前三个项目进行了复习,在巩固了爬虫知识点的同时又复习了类的相关用法;

2.前三个项目可自行戳;文章进行学习:手把手教你使用Python抓取QQ音乐数据(第一弹)手把手教你使用Python抓取QQ音乐数据(第二弹)手把手教你使用Python抓取QQ音乐数据(第三弹)

3.感谢观看,写百行以上的代码是不是轻轻松松呢。祝小伙伴们学业有成,工作顺利!

4.如果需要本文源码的话,请在公众号后台回复“QQ音乐”四个字进行获取,觉得不错,记得给个star噢。

****看完本文有收获?请转发分享给更多的人****

IT共享之家

入群请在微信后台回复【入群】

手把手教你使用Python抓取QQ音乐数据(第二弹)

【一、项目目标】

通过Python爬取QQ音乐数据(一)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名、专辑名、播放链接。

此次我们在之前的基础上获取QQ音乐指定歌曲的歌词及前15个精彩评论。

 

【二、需要的库】

    主要涉及的库有:requests、json、html

【三、项目实现】

    1.以歌曲“泡沫”为例,查看该界面的XHR

2.通过对XHR的Size进行排序,逐个查看(参考英文含义),我们看到第一个红框内是歌曲评论,第二个框内是歌词!

3.分别查看这两条数据Headers里面Parms参数。

4.发现这几个参数可能会代表不同的歌曲,那到底是哪个呢,我们在代开另一首歌对比一下。

5.发现只有这个topid不同,其他都一样,这就代表topid代表不同歌曲的id,同理我们看一下歌词。

6、确定下来:musicid= topid = 歌曲的id,接下来我们的任务是找到这个id。

7.返回以下界面,也就是我们上一个项目的主战场。

参考上一个项目,很容易找到“id”的值就是我们要寻找的id。

所以思路确定下来:先通过input()输入歌名生成url_1找到该歌曲的“id”参数,再生成url_2获取歌词和评论。

8.代码实现:获取歌曲id,如下所示:

import requests,html,json
url_1 = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    # 标记了请求从什么设备,什么浏览器上发出
    }
i = input('请输入需要查询歌词的歌曲名称:')
params = {'ct': '24', 'qqmusic_ver': '1298', 'new_json': '1', 'remoteplace': 'txt.yqq.song', 'searchid': '71600317520820180', 't': '0', 'aggr': '1', 'cr': '1', 'catZhida': '1', 'lossless': '0', 'flag_qc': '0', 'p': '1', 'n': '10', 'w': i, 'g_tk': '5381', 'loginUin': '0', 'hostUin': '0', 'format': 'json', 'inCharset': 'utf8', 'outCharset': 'utf-8', 'notice': '0', 'platform': 'yqq.json', 'needNewCode': '0'}
    
res_music = requests.get(url_1,headers=headers,params=params)
# 发起请求
json_music = res_music.json()
id = json_music['data']['song']['list'][0]['id']
print(id)

9.代码实现:获取歌词

实现方法如下:

url_2 = 'https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_yqq.fcg'
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    # 标记了请求从什么设备,什么浏览器上发出
    }
params = {
    'nobase64':'1',
    'musicid':id,   #用上面获取到的id
    '-':'jsonp1',
    'g_tk':'5381',
    'loginUin':'0',
    'hostUin':'0',
    'format':'json',
    'inCharset':'utf8',
    'outCharset':'utf-8',
    'notice':'0',
    'platform':'yqq.json',
    'needNewCode':'0',
    }

res_music = requests.get(url_2,headers=headers,params=params)
# 发起请求
js = res_music.json()
lyric = js['lyric']
lyric_html = html.unescape(lyric)   #用了转义字符html.unescape方法
# print(lyric_html)
f1 = open(i+'歌词.txt','a',encoding='utf-8')
f1.writelines(lyric_html)
f1.close()                #存储到txt中
input('下载成功,按回车键退出!')

10. 代码实现:获取评论。

url_3 = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg'
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    //  标记了请求从什么设备,什么浏览器上发出
    }
params = {'g_tk_new_20200303': '5381', 'g_tk': '5381', 'loginUin': '0', 'hostUin': '0', 'format': 'json', 'inCharset': 'utf8', 'outCharset': 'GB2312', 'notice': '0', 'platform': 'yqq.json', 'needNewCode': '0', 'cid': '205360772', 'reqtype': '2', 'biztype': '1', 'topid': id, 'cmd': '8', 'needmusiccrit': '0', 'pagenum': '0', 'pagesize': '25', 'lasthotcommentid': '', 'domain': 'qq.com', 'ct': '24', 'cv': '10101010'}
res_music = requests.get(url_3,headers=headers,params=params)
// 发起请求
js = res_music.json()
comments = js['hot_comment']['commentlist']
f2 = open(i+'评论.txt','a',encoding='utf-8')    // 存储到txt中
for i in comments:
    comment = i['rootcommentcontent'] + '\n——————————————————————————————————\n'
    f2.writelines(comment)
// print(comment)
f2.close()
input('下载成功,按回车键退出!')

11. 封装函数

12.结果展示

 

【四、总结】

    1.项目二比项目一稍复杂一点,多了一步获取歌曲id的步骤;

2.通过XHR爬取数据一般要使用json,格式为:

res =requests.get(url)
json =res.json()
list = json[‘’][‘’]

3.学习了转义字符html.unescape方法;

4.保存到txt还可以用 with open() as的方法;

5.Python爬取QQ音乐数据(第三弹)将为大家带来如何爬取更多评论,并生成词云图(wordcloud)。

6.需要本文源码的话,请在公众号后台回复“QQ音乐”四个字进行获取。

——————- End ——————-

往期精彩文章推荐:

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他

手把手教你使用Python抓取QQ音乐数据(第一弹)

【一、项目目标】

    获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名、专辑名、播放链接。

由浅入深,层层递进,非常适合刚入门的同学练手。

 

【二、需要的库】

    主要涉及的库有:requests、json、openpyxl

 

【三、项目实现】

1.了解 QQ 音乐网站的 robots 协议

只禁止播放列表,可以操作。

2.进入 QQ 音乐主页 https://y.qq.com/

3.输入任意歌手,比如邓紫棋

4.打开审查元素(快捷键 Ctrl+Shift+I)

5.分析网页源代码 Elements,发现无歌曲信息,无法使用 BeautifulSoup,如下图所示,结果为空。

6.点击 Network,看数据在不在 XHR(无刷新更新页

面),我的经验是先看 Size 最大的,然后分析 Name,

查看 Preview,果然在里面!

7.点击 Headers,拿到相关参数。如下图,仔细观察

url 与 Query String Parameters 参数的关系,发现

url 中的 w 代表歌手名,p 代表页数。

8.通过 json 代码实现,首先小试牛刀,爬取第一页

的数据,url 直接复制过来。成功!

9.引入 params 参数,实现指定歌手、指定页数的查询。

注意代码url为上一步url中“?”之前的部分, params两边的参数都需要加 ’’,requests.get 添加 params,参数(也可顺便添加 headers 参数)

10. 添加存储功能,保存到本地(Excel)。也可保存为 csv 格式或存入数据库,操作类似。

【四、总结】

1.爬取 QQ 音乐比爬取豆瓣等网站稍难,所需信息不在网页源代码,需查看 XHR;

2.通过 XHR 爬取数据一般要使用 json,格式为:

res =requests.get(url)
json =res.json()
list = json[‘’][‘’]

3.仅供练手参考,不建议爬取太多数据,给服务器增大负载;

4.Python 爬取 QQ 音乐数据(二)将为大家带来如何爬取指定歌曲的歌词及评论(selenium),并生成词云图(wordcloud),敬请期待。

5.需要本文源码的话,请在公众号后台回复“QQ音乐”四个字进行获取。

——————- End ——————-

往期精彩文章推荐:

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他

Python批量创建复工证明实现过程中的Bug汇总及其相应的解决方案

/1 前言/

上个星期的时候,小编给大家分享了手把手教你使用Python批量创建复工证明一文,事实证明,这篇文章真的很实用,没有来得及上车的小伙伴,现在上车也来得及噢。从反馈情况来看,很多小伙伴已经亲自去尝试了,达到了预期的效果。不过有部分小伙伴在实现过程中,却遇到了拦路虎,这里整理一下几个实现过程中的难点,以方便后面遇到相似问题的小伙伴,不再入坑。

 

/2 目标/

1.例举3个常见的问题,并给出相应的解决方案。

 

/3 问题一/

Q1:没有docx-mailmerge这个库。

如果没有这个库的话,直接运行小编分享的代码,会直接报错,如下图所示。

Python批量创建复工证明实现过程中的Bug汇总及其相应的解决方案

这个库平时我们比较难用到,所以一般在Python库里边是没有安装的,那么首先需要先安装这个库。关于为什么要安装docx-mailmerge库而不是mailmerge库的问题,一会儿请看问题二。

安装方法很简单,直接使用安装命令:

pip install docx-mailmerge

但是这个安装方法,有个弊端,那就是安装的时候,太慢了,部分小伙伴直接因为网速或者其他原因,压根儿就安装不上这个库。

Python批量创建复工证明实现过程中的Bug汇总及其相应的解决方案

Ans1:还记得那个换源的文章嘛?一共有两篇文章:手把手教你进行pip换源,让你的Python库下载嗖嗖的,手把手教你进行pip换源,让你的Python库下载嗖嗖的(系列二),使用镜像进行下载,让你的下载速度嗖嗖的,这里直接给出安装命令,如下所示。

pip install docx-mailmerge -i https://pypi.tuna.tsinghua.edu.cn/simple

如果你想日后安装库文件高枕无忧的话,可以戳那两篇文章,直接进行永久换源,操作也十分的简单,以后就不用担心库下载速度慢的问题。

 

/4 问题二/

Q2:在mailmerge这个库里边找不到MailMerge这个函数。

翻车现场如下图所示。

Python批量创建复工证明实现过程中的Bug汇总及其相应的解决方案

明明已经安装了mailmerge库,在代码里边进行导入,也可以高亮,但是竟然没有MailMeige这个函数,导致报错。这个问题,小编一开始实践的时候,也翻车了,后来在博客上了解到mailmerge库里边确实没有那个函数,其实根据pip安装的提示,也是建议安装docx-mailmerge库。

Python批量创建复工证明实现过程中的Bug汇总及其相应的解决方案

知道了这个,那么有的小伙伴就开始去安装docx-mailmerge库了,然后不小心又翻车了,运行程序发现还是报那个错误,真是气人。莫慌,下面给出解决方案。

Ans2:究其原因,是包名冲突了,所以导致这个问题的出现。从实践来看,应该要安装docx-mailmerge库,而不是mailmerge。解决方法也十分的简单,首先先卸载mailmerge库,使用命令:

pip uninstall mailmerge

如下图所示,即可把mailmerge库卸载掉。如果你还没有安装docx-mailmerge库的话,按照问题一的方法,去安装即可。

Python批量创建复工证明实现过程中的Bug汇总及其相应的解决方案

之后,你再次运行程序的话,你会发现一起正常了,如下图所示。

Python批量创建复工证明实现过程中的Bug汇总及其相应的解决方案

 

/5 问题三/

Q3:在找不到“模板”文件。

很多小伙伴在github上只是下载了代码文件,但是忘记下载那两个模板文件了,一个是“模板.docx”,一个是“模板.xlsx”。另外,即便是都下载下来了,但是忘记放在了同一个目录下,都会导致下图问题的发生。

Python批量创建复工证明实现过程中的Bug汇总及其相应的解决方案

Ans3: 解决方法很简单,将Python文件和两个模板文件放在同一个文件夹下就可以了,如下图所示。

Python批量创建复工证明实现过程中的Bug汇总及其相应的解决方案

之后再次运行代码的话,就不会出现那个问题了。

 

/6 总结/

1.本文就Python批量创建复工证明过程中遇到的问题,做一个小的bug总结和解决方案提供,实践证明,行之有效;

2.欢迎大家积极尝试,有问题请积极留言或者私信小编。有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻;

3.需要Python批量创建复工证明源码和模板的小伙伴,可以阅读这篇文章进行获取:手把手教你使用Python批量创建复工证明

——————- End ——————-

往期精彩文章推荐:

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他

手把手教你进行Pycharm活动模板配置

/1 前言/

嘿,各位小伙伴大家好,最近后台很多小伙伴加小编微信,说是想使用Pycharm,除了简单的安装Pycharm和设置Pycharm解释器之外,Python环境搭建—安利Python小白的Python和Pycharm安装详细教程,安装好Pycharm后如何配置Python解释器简易教程,有个活动模板配置,小编觉得也还是蛮重要的,这里整理出来给大家学习。如果想学习一些Pycharm的使用技巧,在后台的精选文章栏目里边有专门的文章系列,可以去学习一下的,

今天给小火煲们带来的干货是Pycharm活动模板配置,一起来看看吧~

 

/2 什么是活动模板/

话不多说,直接上图

活动模板配置.gif

很简单的一个示例,就是在pycharm中输入main关键字,会自动带出一些默认的代码,这个就是活动模板配置

可能有人会问,这个有什么用呢,我只能说,人因懒而伟大,本老鸟就是本着能少写代码就少写代码的态度,能懒则懒的态度,教各位小伙伴如何配置活动模板,偷出更多的懒,哈哈哈!

 

/3 配置活动模板步骤/

1. 点击pycharm左上角,打开settings,如下图所示。

2. 搜索 Live Template,如下图所示。

3. 选择python,如下图所示。

Look,我们常用的main快捷输入就是在这配置的,如下图所示。

4. 点击+号,选择Live Template

5. 配置活动模板

 

/4 示例效果/

配置活动模板呈现的效果如下所示:

ok示例.gif

 

/5 总结/

综上,简单的模板配置就这样完了,下面,我们来看一下它还能让我们有多懒,做web的我们都知道,python有名的web框架,Django,但是我们在写视图的时候,是FBV模式(函数对应url),但是实际中,我们为了代码更加健壮,一般都会使用CBV模式(类对应url),我们来看一下活动模板是否能给我们带来快捷。

cbv.gif

是不是比以前稍微快了点,不用写request了,不用写args了,对吧!

好了,今天干货就到这了,至于怎么玩活动模板,全靠小伙伴发挥了噢。

——————- End ——————-

往期精彩文章推荐:

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他