c++builder 运行网站的api_欧美音乐网站Python爬虫项目实战

news/2024/5/9 11:10:32/文章来源:https://blog.csdn.net/weixin_40004057/article/details/111202127

爬虫项目实战

0x01 目标分析

最近发现一个比较好的欧美音乐下载网站,可以下载大部分高质量欧美音乐。该爬虫项目要实现自动化批量获取用户想要下载的音乐。本文从网站分析、爬虫设计、代码实现三个方面出发,系统介绍该爬虫项目。项目完整代码在Github中可以获得Github MusicDownload https://github.com/ctlyz123/MusicDownload

0x1 音乐搜索界面

在搜索页面输入想要音乐的名称,就可以搜索到类似的音乐。

304fece35be71e83355f6b456ff81c88.png

分析搜索音乐的发送流程,在chrome中F12查看数据包内容

255d6275ea73eb6ebd1f16b060a2e9ec.png

具体数据包内容如下,q参数为查询参数,向mp3quack.com发送请求

Request URL: https://mp3quack.com/?q=Lover

Request Method: GET

Status Code: 301

Remote Address: 127.0.0.1:1080

Referrer Policy: no-referrer-when-downgrade

与想象中不同的是回应包是个重定向包,重定向网址是音乐的介绍网址,内容如下:

location: https://lover.mp3quack.com/

pragma: no-cache

server: cloudflare

status: 301

taken-time: 2 ms

0x2 音乐下载界面

1 获取音乐编码

每个音乐下载界面都是https://mp3pro.xyz/ 加一串字符该字符的获取在音乐介绍网址对应上节就是 https://lover.mp3quack.com/

581117428dd79e0372a6c51f9c1098f7.png

2 获取音乐token1

在本网站要有音乐token2和音乐code编码两个东西才能定位和下载音乐,但是token2的获取需要token1,所以首先要找到token1,获取token1的方法还是通过数据包中寻找,发现下面数据包

38c55bdbd6924581107d99b41c8ce952.png

该数据包请求格式为

Request URL: https://mp3pro.xyz/ajax

Request Method: POST

Status Code: 200

Remote Address: 127.0.0.1:1080

Referrer Policy: no-referrer-when-downgrade

purpose: audio

token: cvUAzpn48xA:e70b1595e566ec841c9a11f920ac5b5b

最终在https://mp3pro.xyz/cvUAzpn48xA 网页源码找到token内容

2dd445cca28bf091f824a83bfde5a2ad.png

有了token1就可以获取token2了通过https://mp3pro.xyz/ajax 处理的响应包为

{"status":true,"cache":true,"audio":"cvUAzpn48xA:87bc4a8ef51006bd4d8a953e44c04caf"}

0x3 获取下载网址

通过token2 发送 如下请求即可获取网址

Request URL: https://mp3pro.xyz/ajax

Request Method: POST

Status Code: 200

Remote Address: 127.0.0.1:1080

Referrer Policy: no-referrer-when-downgrade

purpose: download

token: cvUAzpn48xA:87bc4a8ef51006bd4d8a953e44c04caf

f: 0

d: 0

b: 320

c: 1

r: https://mp3pro.xyz/cvUAzpn48xA

在上面的数据请求中需要获取音乐编码和音乐token2,我们现在都以具备,看一下响应包:

{"status":true,"mp3url":"http:\/\/nl04.mp3pro.xyz\/7cb1bf3c5a39d7223b3d0\/Taylor%20Swift%20-%20Lover.mp3"}

响应包中的mp3url就是音乐的下载链接

0x02 流程设计

有了上述的简单分析,我们初步可以实现单个音乐的下载,本节设计代码结构,利用一些设计方法和思想,把大概框架梳理一下。

0x1 模块梳理

按照功能划分模块,本文想要实现的是一个多线程大批音乐链接获取和下载功能。

  • 音乐下载链接生成模块

  • 音乐下载模块

  • 多线程模块

  • 综合管理控制模块

为了方便后期扩展,在各个模块之间采用的依赖关系,相互关系如下

2d1d0d6fbe08e9ce9002449605b446fe.png

在main.py中向controller模块传递一个模块类和两个模块对象,实现模块的整合。整合代码和模块内容在代码实现中讲解。

0x2 配置文件

为方便配置,将配置以json的格式存储,利用Utils模块进行配置文件加载 配置文件格式如下:

{

"Url": {

"Main_url": "https://mp3quack.com",

"Mid_url": "https://mp3pro.xyz"

},

"Dir": {

"Save_Path": "Music"

},

"File":{

"MusicList": "Config/MusicList"

}

}

相关加载代码

def loadconfig(filename):

import json

json_data = {}

with open(filename) as f:

json_data = json.load(f)

return json_data

0x03 代码实现

分模块进行介绍,主要包含

链接生成模块

多线程模块

下载模块

综合管理模块

在这之前先看下主函数整合逻辑

0x1 main.py

# -----------------load config--------------------

configpath = "Config/config.json"

configs = loadconfig(configpath)//加载配置文件

dir_config = configs["Dir"]

file_config = configs["File"]

# -----------------create classes--------------

builder = Builder(configpath)

downloader = Downloader(dir_config["Save_Path"])

controller = Controller(file_config["MusicList"])

# ----------------auto download----------------

controller = controller.init(downloader,builder,ThreadDownload)

controller.AutoDownload()

代码比较简洁,分为三个步骤 加载配置文件、创建类和对象、生成链接下载器

0x2 链接生成模块

主要分为四个步骤 获取音乐码、获取token1、获取token2、获取链接

1.获取音乐码

search_url = "%s/?q=%s"%(self.urlconfig["Main_url"],quote(music_name))

content = requests.get(search_url).content

Music_code = re.findall("vi\/(.*)\/maxresdefault\.jpg",str(content))[0]

获取配置文件中Main_url字段,访问查询页面,利用正则匹配找到对应的音乐code

2.获取token1

mid_url = "%s/%s"%(self.urlconfig["Mid_url"],Music_code)

content = requests.get(mid_url).content

m_token = re.findall('token":"(.*)","verify"',str(content))[0]

访问配置文件中Mid_url链接,将获取的music code加到链接里面,通过正则寻找token位置和内容。

3.获取token2

data = {

"purpose": "audio",

"token": m_token,

}

req = requests.post("https://mp3pro.xyz/ajax",data=data)

res_json = json.loads(bytes.decode(req.content))

code_token = res_json["audio"]

带着token1访问ajax接口,利用json格式解析返回的内容,取出audio字段。该字段中存储着token2的值。

4.获取链接

data = {

"purpose":"download",

"token":code_token,

"f":0,

"d":0,

"b":320,

"c":1,

"r":"https://mp3pro.xyz/{}".format(code_token.split(":")[0])

}

req = requests.post("https://mp3pro.xyz/ajax", data=data)

res_json = json.loads(bytes.decode(req.content))//json解析response

再次利用ajax请求,将post数据设置为上述格式就可以获取到下载链接了,效果图如下

ed1bb9cb964ad3cc8442f2656f31b1a6.png

0x3 多线程模块

def __init__(self,builder,downloader,MusicName):

self.builder = builder

self.downloader = downloader

self.MusicName = MusicName

def run(self):

Musicurl = self.builder.create(self.MusicName)

print(self.MusicName.strip(),":",Musicurl)

# self.downloader.download(Musicurl,self.MusicName)//下载音乐

利用依赖的方式调用各个模块,注释的一行可以从链接中下载音乐内容。

0x4 下载模块

req = requests.get(url,stream=True)//采用流模式

with open(os.path.join("Music",MusicName+".mp3"), "wb") as f:

for chunk in req.iter_content(chunk_size=512):

if chunk:

f.write(chunk)

采用requests数据流模式,分块下载数据,每次下载chunk_size大小

0x5 综合管理模块

def AutoDownload(self):

MusicsName = readfile(self.list_filename)

logging.info("[+] Begin Download")

threads = []

threadPool = ThreadPoolExecutor(max_workers=10)//设置线程数

for MusicName in MusicsName:

thread = self.treadownload(self.builder,self.downloader,MusicName.strip())

threadPool.submit(thread.run)//注册线程函数

threadPool.shutdown(wait=True)//等待所有线程

logging.info("[+] Download Successful")

第五行利用ThreadPoolExecutor设置线程池大小为10,也就是最多有10个线程同时运行。第8行,注册线程中的主函数,也就是音乐链接和下载功能。

0x04 总结

本文通过分析音乐网站的下载方式,梳理单个音乐下载方法,设计代码结构模块,采用依赖方法将各个模块整合一起,实现多线程多音乐链接获取和下载功能。这里的核心在于token1和token2的获取和利用方面,其次是设计代码模块和衔接模块。希望大家能通过本文学习到关于python和爬虫的相关知识。

Usage:将要下载的音乐写在Config文件夹中的MusicList里面按照这种格式,执行main.py就会自动生成下载链接。

Lover
Hello
Venom
Everthing I Need

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_711175.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优秀常用网站汇总.txt

一、技术类 http://bbs.51cto.com http://www.epubit.com.cn/ https://www.printfriendly.com/ 浏览器插件,可下载51cto专栏等限制复制等页面为pdf https://www.csdn.net/ 二、Linux https://github.com http://www.ansible.com.cn(Ansible中文权威指南) h…

网站图片全自动加密_外卖优惠平台内容加密参数分析!你见过一块钱买外卖的吗?...

Js 加密的内容其实大同小异,目前咸鱼也在不断学习 APP 逆向的知识,之后会出一部分关于 APP 逆向在爬虫中的应用相关的文章,这部分设计的技能栈较广,大家可以先预习 Java 基础与 Android 基础。抓包与加密定位这个网站的加密部分是…

生日快乐网站_【总结 】文化自信源自基层贺房氏网站建站十五周年

重要提醒:2004年起创建房氏网(房氏网站fang.org.cn)及QQ群,收集房氏家谱、源流、名人、企业,搭建寻根、联谊等一体文化平台,专业专注于房氏文化,为全球100多万房家人服务的一个综合体,欢迎大家的加入与参与…

搭建网站-Disczu

搭建网站 更新时间: 2020/02/05 GMT08:00 查看PDF 分享 已有服务 搭建流程 准备软件 WinSCP WinSCP是在Windows环境下使用SSH的开源图形化SFTP客户端,用于在本地与远程计算机间安全的复制文件。下载地址:WinSCP Discuz X3.3软件包 请在…

搭建Magento电子商务网站

搭建Magento电子商务网站 更新时间:2020-05-08 18:34:32 编辑我的收藏 本页目录 前提条件背景信息操作流程步骤一:安装并配置Apache步骤二:安装并配置MySQL步骤三:安装并配置PHP步骤四:创建Magento数据库步骤五&am…

搭建Magento电子商务网站

搭建Magento电子商务网站 https://help.aliyun.com/document_detail/50704.html 更新时间:2020-05-08 18:34:32 编辑我的收藏 本页目录 前提条件背景信息操作流程步骤一:安装并配置Apache步骤二:安装并配置MySQL步骤三:安装并…

网站的服务器怎么维护,网站服务器怎么维护

网站服务器怎么维护 内容精选换一换云服务器使用,服务器使用,服务器配置,云主机使用,弹性云服务器入门,ecs使用来自:产品华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、AP…

iis日志字段解析 网站运维工具使用iis日志分析工具分析iis日志(iis日志的配置)

网站运维工具使用iis日志分析工具分析iis日志(iis日志的配置) https://www.cnblogs.com/fuqiang88/p/5870306.html 我们只能通过各种系统日志来分析网站的运行状况,对于部署在IIS上的网站来说,IIS日志提供了最有价值的信息,我们可以通过它来…

欧洲云计算巨头数据中心起火 350万家网站下线

欧洲云计算巨头数据中心起火 350万家网站下线 https://mp.weixin.qq.com/s/RGHI-UWAndz_cdZmgU5y2g 当地时间10日,法国东部下莱茵省省政府发布公告,当天凌晨法国大型网络服务商OVH公司位于下莱茵省首府斯特拉斯堡的数据中心起火,当地消防部…

收藏!50个帮你自我提升的网站

收藏!50个帮你自我提升的网站 https://m.gmw.cn/toutiao/2021-03/31/content_1302199667.htm?tt_fromweixin&tt_group_id6945590883542958629&tt_fromweixin&utm_campaignclient_share&wxshare_count1&timestamp1617203663&appnews_artic…

ESXi日志分析网站第五版v5.4

ESXi日志分析网站第五版v5.4 https://mp.weixin.qq.com/s/mz3OVG7vw_wjUtSzFApBpQ 第5.4版更新 支持ESXI7.0版本及以上日志分析 常规性安全加固 ----------------------------华丽的分割线-------------------------------------- 第5.3版 更新: 1.在Host HCL info页面加…

nofollow标签_网站Nofollow标签的应用场景

nofollow标签是HTML的一个属性,用于告诉搜索引擎不要追踪特定的网页链接。减少垃圾对搜索引擎的排名影响。网站SEO优化nofollow标签的应用起到一定的作用。网站Nofollow标签的应用场景:1、nofollow标签通常用于论坛帖子、博客评价,这些地方存…

pyqt怎么button怎么链接_SEO内部链接怎么优化

站的内部链接一般是指在站内的A页面有相关链接指向到B页面。在网站的SEO优化中,做好内部链接的作业是SEOer们的基础作业之一。内部链接的目的除了进步整个网站的录入状况与频率之外,更重要的是引导使用者适时地引导至下一个相关页面中,让全体…

python壁纸数据抓取_python 多线程爬取壁纸网站的示例

基本开发环境・ Python 3.6・ Pycharm需要导入的库目标网页分析网站是静态网站,没有加密,可以直接爬取整体思路:1、先在列表页面获取每张壁纸的详情页地址2、在壁纸详情页面获取壁纸真实高清url地址3、保存地址代码实现模拟浏览器请请求网页&…

tp5写的系统比php源码写的慢多少,基于TP5框架开发的极速企业网站开发框架PHP源码...

源码介绍TPFrame保持了ThinkPHP5框架原有的所有特性,在ThinkPHP动力驱动模式下做了进一步的开发,对CBD模式做了更深的强化,优化核心,减少依赖,为个人或企业建站提供高效、快速解决的方案,是你快速做在线成品…

ssh传输越多越慢_Linux下分析网站访问慢原因

网站访问慢?这里我们在 Linux 来看看访问慢是为什么1. curl命令加参数方法1:curl -o /dev/null -s -w %{http_code}::%{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_total}::%{speed_download}"" https://www.baidu.co…

linuxweb服务器域名网站,linux web服务器目录

linux web服务器目录 内容精选换一换在FusionInsight Manager软件安装及使用过程中,针对Tomcat基于开源做了如下功能增强:升级Tomcat版本为官方稳定版本。设置应用程序webapplications之下的目录权限为500,对webapplications之下的部分目录支…

seo按天扣费系统_网站seo优化多少钱,SEO快速排名按天扣费怎么样

seo搜索引擎优化也可以称作seo关键词排名优化,有些人根据他的针对性称为百度seo优化(百度seo优化排名),相对于更多的网络推广方式来说,seo推广尤其重要而且更得人心,seo网站推广(seo网站优化)因为其面向对象是直接的有需求搜索客户…

2440 linux文件写,添加yaffs2文件系统 - Linux2.6.39在S3C2440上的移植_Linux编程_Linux公社-Linux系统门户网站...

1、主机环境:VMare下Ubuntu10.04 ,1G内存。2、编译编译环境:arm-linux-gcc3、开发板:Micro2440,2M nor flash,256M nand flash。4、u-boot-version:u-boot-2010.065、linux -version&#xff1a…

计算机网络知识如何建立数据库,如何将本机的SQL Server数据库上传到网站的数据服务器?...

将本机的SQL数据库上传到网站数据服务器一般步骤为:创建表单、导入数据。下面以SQL Server2008R2 为基础,具体操作方法如下:1、打开 SSMS - 【SQL Server Management Studio】2、选择需上传的数据库,本例为:【Web_Bekd…