网页音频抓取软件(热门频道2.喜马拉雅音频数据爬下来(二):运行环境)
优采云 发布时间: 2022-01-21 08:09网页音频抓取软件(热门频道2.喜马拉雅音频数据爬下来(二):运行环境)
一、简介
这次我们爬取了喜马拉雅热门段下所有电台的各个频道的信息以及该频道中各个音频数据的各种信息,然后将爬取的数据保存到mongodb中以备后续使用。这次的数据量在 70 万左右。音频数据包括音频下载地址、频道信息、介绍等,有很多。
昨天,我迎来了人生中的第一次面试。另一方是一家人。我打算在大二的暑假期间实习。他们要求爬取音频数据,所以我将分析喜马拉雅山的音频数据。目前还在等三轮面试,或者是最后面试消息的通知。(因为能得到一定的肯定,不管成功与否,我都很开心)
2:运行环境 3:实例分析
1.首先进入本次爬取的主页面,可以看到每个页面有12个频道,每个频道下有很多音频,有的频道有很多页面。爬取计划:遍历84个页面,解析每个页面,获取每个频道的名称、图片链接、频道链接,保存到mongodb。
热门频道
2.打开开发者模式,分析页面,很快就可以得到想要的数据的位置。下面的代码实现了抓取所有热门频道的信息,可以保存在mongodb中。
start_urls = ['http://www.ximalaya.com/dq/all/{}'.format(num) for num in range(1, 85)]for start_url in start_urls: html = requests.get(start_url, headers=headers1).text
分析渠道
3.下一步是获取每个通道中的所有音频数据。美国频道的链接是通过前面的页面解析获得的。比如我们分析进入这个链接后的页面结构。可以看出,每个音频都有一个特定的ID,可以在一个div中的一个属性中获取。使用 split() 和 int() 转换为单独的 ID。
频道页面分析
4.然后点击一个音频链接,进入开发者模式,刷新页面点击XHR,然后点击一个json链接可以看到这个,包括音频的所有细节。
html = requests.get(url, headers=headers2).textnumlist = etree.HTML(html).xpath('//div[@class="personal_body"]/@sound_ids')[0].split(',')for i in numlist:
音频页面分析
5.上面只解析了一个频道主页面的所有音频信息,但实际上频道的音频链接有很多页面。
html = requests.get(url, headers=headers2).textifanother = etree.HTML(html).xpath('//div[@class="pagingBar_wrapper"]/a[last()-1]/@data-page')if len(ifanother): num = ifanother[0]
分页
6.所有代码
完整代码地址/rieuse/learnPython
__author__ = '布咯咯_rieuse'import jsonimport randomimport timeimport pymongoimport requestsfrom bs4 import BeautifulSoupfrom lxml import etree
7.如果改成异步形式可以更快,改成下面这样就可以了。我试图每分钟比正常情况多获得近 100 个数据。此源代码也在 github 中。
异步
五:总结
本次抓取的数据量在70万左右,未来可以对这个数据进行很多研究,比如播放量排名、时间段排名、声道音频数等。后续我会继续学习使用科学计算和绘图工具进行数据分析和清洗。
如果您在学习过程中遇到任何问题或想获取学习资源,欢迎加入学习交流群
626062078,一起学Python吧!