抓取网页音频(Python爬虫实战案例之取喜马拉雅音频数据详解(一))

优采云 发布时间: 2022-03-26 12:07

  抓取网页音频(Python爬虫实战案例之取喜马拉雅音频数据详解(一))

  前言

  喜马拉雅是一个专业的音频分享平台,汇集了有声小说、有声读物、有声读物、FM收音机、儿童睡前故事、相声小品、鬼故事等数以亿计的音频,喜欢听民间故事和德云社会相声采集最多。,和你?

  今天就带大家爬取喜马拉雅音频数据,一起期待吧!!

  这个案例的视频链接在这里

  项目目标

  爬取喜马拉雅音频数据

  受害者地址

  

  本文知识点:

  1、网页属性系统分析

  2、多层数据分析

  3、保存海量音频数据

  环境:

  1.确定数据所在的链接地址(url)

  2.通过代码发送url地址的请求

  3.分析数据(如果需要,过滤不需要的)

  4.数据持久化(保存)

  案例思路:

  1. 获取静态数据中音频的id值

  2. 发送指定id值json数据请求(src)

  3. 从json数据解析音频对应的URL地址开始写代码

  先导入需要的模块

  

import requests

import parsel # 数据解析模块

import re

  1.确定数据所在的链接地址(url) 反向分析网页性质(静态网页/动态网页)

  打开开发者工具,播放一段音频,可以在Madie中找到一个数据包

  

  复制网址,搜索

  

  查找 id 值

  

  继续搜索找到请求头参数

  

url = 'https://www.ximalaya.com/youshengshu/4256765/p{}/'.format(page)

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}

  2.通过代码发送url地址的请求

  

response = requests.get(url=url, headers=headers)

html_data = response.text

  3.分析数据(如果需要,不需要就过滤)解析音频的id值

  

selector = parsel.Selector(html_data)

lis = selector.xpath('//div[@class="sound-list _is"]/ul/li')

for li in lis:

try:

title = li.xpath('.//a/@title').get() + '.m4a'

href = li.xpath('.//a/@href').get()

# print(title, href)

m4a_id = href.split('/')[-1]

# print(href, m4a_id)

# 发送指定id值json数据请求(src)

json_url = 'https://www.ximalaya.com/revision/play/v1/audio?id={}&ptype=1'.format(m4a_id)

json_data = requests.get(url=json_url, headers=headers).json()

# print(json_data)

# 提取音频地址

m4a_url = json_data['data']['src']

# print(m4a_url)

# 请求音频数据

m4a_data = requests.get(url=m4a_url, headers=headers).content

new_title = change_title(title)

  4.数据持久化(保存)

  

with open('video\\' + new_title, mode='wb') as f:

f.write(m4a_data)

print('保存完成:', title)

  最后,我们要处理文件名中的非法字符

  

def change_title(title):

pattern = re.compile(r"[\/\\\:\*\?\"\\|]") # '/ \ : * ? " < > |'

new_title = re.sub(pattern, "_", title) # 替换为下划线

return new_title

  完整代码

  

import re

import requests

import parsel # 数据解析模块

def change_title(title):

"""处理文件名非法字符的方法"""

pattern = re.compile(r"[\/\\\:\*\?\"\\|]") # '/ \ : * ? " < > |'

new_title = re.sub(pattern, "_", title) # 替换为下划线

return new_title

for page in range(13, 33):

print('---------------正在爬取第{}页的数据----------------'.format(page))

# 1.确定数据所在的链接地址(url) 逆向分析 网页性质(静态网页/动态网页)

url = 'https://www.ximalaya.com/youshengshu/4256765/p{}/'.format(page)

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}

# 2.通过代码发送url地址的请求

response = requests.get(url=url, headers=headers)

html_data = response.text

# print(html_data)

# 3.解析数据(要的, 筛选不要的) 解析音频的 id值

selector = parsel.Selector(html_data)

lis = selector.xpath('//div[@class="sound-list _is"]/ul/li')

for li in lis:

try:

title = li.xpath('.//a/@title').get() + '.m4a'

href = li.xpath('.//a/@href').get()

# print(title, href)

m4a_id = href.split('/')[-1]

# print(href, m4a_id)

# 发送指定id值json数据请求(src)

json_url = 'https://www.ximalaya.com/revision/play/v1/audio?id={}&ptype=1'.format(m4a_id)

json_data = requests.get(url=json_url, headers=headers).json()

# print(json_data)

# 提取音频地址

m4a_url = json_data['data']['src']

# print(m4a_url)

# 请求音频数据

m4a_data = requests.get(url=m4a_url, headers=headers).content

new_title = change_title(title)

# print(new_title)

# 4.数据持久化(保存)

with open('video\\' + new_title, mode='wb') as f:

f.write(m4a_data)

print('保存完成:', title)

except:

pass

  运行代码,效果如下

  

  至此,本文文章关于Python爬虫获取喜马拉雅音频数据实际案例的详细讲解就介绍到这里了。更多关于Python爬取喜马拉雅音频数据的信息,请搜索Scripting Home的上一期文章或继续浏览以下相关文章希望大家以后多多支持Scripting Home!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线