网页音频抓取(爬取喜马拉雅音频数据受害者(爬虫知识点)案例分析(一))

优采云 发布时间: 2022-03-19 13:27

  网页音频抓取(爬取喜马拉雅音频数据受害者(爬虫知识点)案例分析(一))

  前言

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

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

  项目目标

  爬取喜马拉雅音频数据

  受害者地址

  https://www.ximalaya.com/

  

  本文知识点:

  环境:

  想法:(履带式案例)

  案例思路:

  开始写代码

  先导入需要的模块

  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"[\/\\\:\*\?\"\\|]") # &#39;/ \ : * ? " < > |&#39;

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

return new_title

  完整代码

  import re

import requests

import parsel # 数据解析模块

def change_title(title):

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

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

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

return new_title

for page in range(13, 33):

print(&#39;---------------正在爬取第{}页的数据----------------&#39;.format(page))

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

url = &#39;https://www.ximalaya.com/youshengshu/4256765/p{}/&#39;.format(page)

headers = {

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

# 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(&#39;//div[@class="sound-list _is"]/ul/li&#39;)

for li in lis:

try:

title = li.xpath(&#39;.//a/@title&#39;).get() + &#39;.m4a&#39;

href = li.xpath(&#39;.//a/@href&#39;).get()

# print(title, href)

m4a_id = href.split(&#39;/&#39;)[-1]

# print(href, m4a_id)

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

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

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

# print(json_data)

# 提取音频地址

m4a_url = json_data[&#39;data&#39;][&#39;src&#39;]

# print(m4a_url)

# 请求音频数据

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

new_title = change_title(title)

# print(new_title)

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

with open(&#39;video\\&#39; + new_title, mode=&#39;wb&#39;) as f:

f.write(m4a_data)

print(&#39;保存完成:&#39;, title)

except:

pass

  运行代码,效果如下

  

  本文文字和图片来源于网络,仅供学习交流,不具有任何商业用途。如有任何问题,请及时联系我们进行处理。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线