作者:MINUS大大
最近在深度学习python之余在听明史,大宇茶馆讲的明史是真好啊——听朱元璋打天下、听朱棣造反、听嘉靖皇帝与文官斗智斗勇,贼上瘾。
然后今天我突然想到——可以拿大宇茶馆的明史系列当一次爬虫练手。
而这次爬虫练习只是想爬取这些成语标题+链接,并不想抓取背后的音频文件(因为这个播放列表本就是免费的,其实在APP听就挺好的)。
熟悉
来一起看下喜马拉雅的网页样子:
思路划重点:
- 红框部分是播放链接
- 点上边就会进入播放页面——也就是含有内部url链接
- 抓当前页面的列表部分
- 得到名称及链接
抓取尝试方式——1
网页如下
在网页端element下有名字及href,因此尝试直接抓取:
得到的答案是:有响应,但是没有内容。
抓取尝试方式——2
因此尝试用XHR的方法,即:Network-XHR-Headers中看数据请求链接,和在preview中查看结构再层层抓取。
1思考思路
2观察结构
观察结构后,撰写代码如下:
可是呢,仍然为空,代码错误是:11行json不对,但是我确定json语句是这么写的,那错误在哪儿那?
代码错误是为什么呢?后来发现是因为喜马拉雅拒绝python爬虫的,因此需要做一定伪装。
即Headers的加载。以下是一个伪装的headers
headers={
'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3578.98 Safari/527.36'
}
当这些都解决了后,完成了该页面的抓取:
这个播放列表300多集,播音员的工作也不容易呀。
后续
抓这个列表有什么作用呢?
喜马拉雅是能收藏的,但是收藏完了后在APP翻也是需要时间的,而且经常分心,下次看到完结的,不错的,可以抓取下来存好了。按系列听起来。不怕广告及其他分神。
此外感谢爱德老师帮忙分析遇到问题。
The End