【爬虫修炼和实战】二、从requests开始——爬取喜马拉雅全站音频数据(基础篇)

第二篇为利用爬虫基本的requests库和正则表达式爬取喜马拉雅全站数据。

申明:本文仅做学习用。

多图警告。

目录

一、常用函数和库

二、网站结构分析

首页 https://www.ximalaya.com/

全部分类 https://www.ximalaya.com/category/

基本分类 https://www.ximalaya.com/youshengshu/reci231/

专辑页面 https://www.ximalaya.com/yinyue/24041806/

音频页面 https://www.ximalaya.com/yinyue/24041806/294025103

xm-sign生成

三、代码架构和实现


一、常用函数和库

二、网站结构分析

       首页为一些音乐的推荐,爬取全站只需关注网站的目录索引网址在哪即可。

      可发现全部分类的链接为https://www.ximalaya.com/category/,URL地址附加了category字段

       这个网页列出了喜马拉雅全站的所有音频分类和链接,可看做要爬取的根目录。一共有三层目录结构,例如:娱乐-音乐-纯音乐。加粗的推荐和分类下的小类实际都为一部分,目录结构可做保存到本地的文件结构的参考,最终只要获取到此页最小的分类的URL即可,例如:纯音乐  https://www.ximalaya.com/yinyue/reci310/

开发者工具查看源码逐层分析如下:

第一层

category_plate _AK类一共有5个,分别对应有声小说、娱乐、知识、生活、特色五个大类,需要获取标题名称,创建分类目录用。

标题标签所在:

<div class="anchor _AK" id="有声小说"></div>

 获取代码:

url_response = '<div class="anchor _AK" id="有声小说"></div>'
# 获取单个
title = re.search('<div class="anchor _AK" id="(.*?)"></div>', url_response).group(1)
# 最终获取的是列表
title_list = re.findall('<div class="anchor _AK" id="(.*?)"></div>', url_response)

第二层

subject_wrapper _AK类为第二层,对应五个大类中的下一类,图中对应有声书,需要获取标题名称,创建分类目录用。

有声书的中文标题在subject_wrapper _AK类下的subject _AK类的h2标签中,类型为_AK:

 <h2 class="_AK"><img class="img _AK" src="//fdfs.xmcdn.com/group42/M07/B5/00/wKgJ9Fq16BSishjCAAAc2ts5ctw377.png" alt="">有声书</h2>

 获取代码:

url_response = '<h2 class="_AK"><img class="img _AK" src="//fdfs.xmcdn.com/group42/M07/B5/00/wKgJ9Fq16BSishjCAAAc2ts5ctw377.png" alt="">有声书</h2>'
title = re.search('<h2 class="_AK">.*?>(.*?)</h2>', url_response).group(1)
title_list = re.findall('<h2 class="_AK">.*?>(.*?)</h2>', url_response)

第三层

 item separator _AK类为第三层,对应最小的一类,需要获取的有URL和标题,URL用来请求分类页面,标题创建分类目录用。

这里的URL为一段,和喜马拉雅首页网址拼接即可,例如:https://www.ximalaya.com + /youshengshu/reci231/

HTML格式为:

<a class="item separator _AK" href="/youshengshu/reci231/">言情</a>

 获取URL和标题的代码:

url_response = '<a class="item separator _AK" href="/youshengshu/reci231/">言情</a>'
result = re.search('<a class="item separator _AK" href="(.*?)">(.*?)</a>', url_response)
url = result.group(1)
title = result.group(2)

至此可以通过全部分类https://www.ximalaya.com/category/这个页面获取到所有音频的分类作为本地目录的结构,方便管理和进一步分析,还获取到了最小分类的URL链接字段,用来请求页面,例如:/youshengshu/reci231/

       这类页面需要获取的有音乐专辑的URL(一页大概有三十个,用来获取专辑页面)和页数(用来爬取全部音频,图中共有34页)

暂只爬取免费音频,点此查看喜马拉雅的爬虫规则

勾选免费后,URL地址附加了/mr132t2722/字段,https://www.xima

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值