吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1608|回复: 0
收起左侧

[Python 转载] 【笔记】【python】初学爬虫--爬取某网音乐资源思路及过程的总结

[复制链接]
一颗大树 发表于 2020-5-7 14:36
该爬虫代码是根据教程学习得来,算不得原创,利用论坛写下思路和踩下的坑吧。
该网站不要求登录、无验证码、无反爬,适合我这种纯小白练习。
思路:
1、分析网站网址变换规律,一般首页的格式可根据后面几页的url推算得来;
2、利用requests库请求网站源码,利用正则表达式获取到源码中的歌曲名称、序号及网址必要的组成部分;
3、进行字符串拼接,得到可用的、真实的歌曲资源地址;
4、利用循环逐页下载保存即可。
总结:
1、.content与.text有区别。
response.text 得到的是文本 str类型,默认编码格式是ISO-8859-1。出现乱码要encoding以下,如:response.encoding = "utf-8"response.content 得到的是 视频 ,图片等 byte ,二进制类型。因此,下音乐时不能用content。2、爬虫要预留一个暂停时间,不要给对方服务器压力,避免被屏蔽3、网络链接规则有时会改变,因此爬虫需要维护。


[Python] 纯文本查看 复制代码
# 文件路径C:/Users/Kai/Music/import requests
import time
import re

# analyse the url of list
# http://www.htqyy.com/top/hot   1st page
# http://www.htqyy.com/top/musicList/hot?pageIndex=1&pageSize=20    2nd page# 开发者模式中找
# http://www.htqyy.com/top/musicList/hot?pageIndex=2&pageSize=20    3rd page 
# http://www.htqyy.com/top/musicList/hot?pageIndex=3&pageSize=20    4th page

# the url of songs
# http://www.htqyy.com/play/33    #真实URL地址
# http://www.htqyy.com/play/62

# 分析发现,真正的播放资源在http://f2.htqyy.com/play7/33/mp3/5这样地方的


headers = {
"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129\
 Mobile Safari/537.36"
 }
songID = []
songName = []

page = int(input("请输入你要爬取的页数,每页20首:"))
for i in range(0,page):
	url = "http://www.htqyy.com/top/musicList/hot?pageIndex=" + str(i) + "&pageSize=20"
	# 获取网页信息
	html = requests.get(url)
	strr = html.text
	#print(html.text)

	# 从<a href="/play/33" target="play" title="清晨" sid="33">清晨</a>  提取33组成音乐资源链接
	part1 = r'title="(.*?)" sid='
	part2 = r'sid="(.*?)"'

	Titlelist = re.findall(part1, strr)
	Idlist = re.findall(part2,strr)
	#print(Titlelist,Idlist)
	songName.extend(Titlelist)
	songID.extend(Idlist)

# print(songName,songID)

for i in range(0,len(songID)):
	songUrl = "http://f2.htqyy.com/play7/" + str(songID[i]) + "/mp3/5"  # 歌曲资源网址变化的地方只在songID处
	songname = songName[i]

	data = requests.get(songUrl).content

	print("正在下载第", i + 1, "首")
	with open("C:/Users/Kai/Music/{}.mp3".format(songname),"wb") as f:
		f.write(data)
	
	time.sleep(0.5)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 07:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表