第二篇为利用爬虫基本的requests库和正则表达式爬取喜马拉雅全站数据。
申明:本文仅做学习用。
多图警告。
目录
全部分类 https://www.ximalaya.com/category/
基本分类 https://www.ximalaya.com/youshengshu/reci231/
专辑页面 https://www.ximalaya.com/yinyue/24041806/
音频页面 https://www.ximalaya.com/yinyue/24041806/294025103
一、常用函数和库
二、网站结构分析
首页为一些音乐的推荐,爬取全站只需关注网站的目录索引网址在哪即可。
可发现全部分类的链接为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