Python爬取音乐网站遇到的困难及解决思路

本文讲述了作者在使用Python爬取一个音乐网站时遇到的挑战,包括如何处理通过AJAX异步加载的内容。通过分析网页源码、理解JS文件和调整请求头,最终成功抓取到JSON数据。文章强调了学会自行解决问题的重要性,并分享了具体的解决步骤和技术要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python爬取音乐网站遇到的困难及解决思路

背景

前几天写爬虫的时候,遇到一个网站(music.bbbbbb.me)通过ajax异步加载实现内容的呈现,当时我就懵了——以前从未遇到过,而一般的教程中没有这样的东西!

一些思考

网上大多的教程讲的都是基础性的,普遍性的,对于不同的场景其实都是需要做出稍微改进的。
比如说大多数的爬虫教程吧,可以分为这几类:

  • 第一类,它会直接扔出源码,然后什么也不写。
  • 第二类,它会直接扔出源码,但加一点注释。

这两类都是授人以鱼,而且具有很大局限性——针对特定的网站管用。

  • 第三类,就是类似你看到的一步一步将库怎么用,一步一步构建实例带你的。

这些的话是授人以渔,会告诉你为什么这样用,这样用有什么效果,具有简单的逻辑。
但有一句话是这么说的:师父领进门修行在个人。这些不用花费很大“代价”的教程,最多是渔网,不会是鱼叉,比较凶猛的鱼就没啥办法了。这时候有两个办法:

  1. 花钱买鱼叉
  2. 自己造鱼叉

但是不同的鱼,你可能需要不同的鱼叉,甚至可能需要鱼雷,直接买肯定是没问题,但是如果你需要战略性武器——超级无敌厉害的捕鱼工具。就会有技术垄断,你花多少钱都买不到。所以我觉得,学会自己造鱼叉很重要。

针对性分析

造鱼叉,在这个问题上体现为如下几个步骤:

  1. 为什么这个网页源码里没下载地址?
  2. 通过观察源码,发现它调用了几个js文件,并且 发现这些js文件只有一个在本站,别的都是别的网站的。显然显示url的功能应该是交给这个在本站的js文件了。
  3. 观察js文件,果然发现了url的产生方法,这个时候就需要考虑了,怎么获取js中内容了。
  4. 百度“python爬虫如何获取js内容”,发现了参考文献0,知道了这是ajax技术实现的。
  5. 这下就好办了,按理说按照这个下去就行了,虽然这个网站不太好,图片加载不出,但是问题不大。通过阅览那篇不全的网站,我知道了这时会返回json文件,然后把json文件加载到网页中是通过ajax实现的(出于好奇我了解了下ajax,不过这不是关键),关键在于抓取返回的json文件。
  6. 按照参考文献0我先写出了一个框架,然后测试了一下,发现不太行,查了一下错误,这是因为获取的内容格式不对。
  7. 我打印了一下获取的内容,发现不是json文件,而是html文本。困惑。
  8. 百度“python爬虫如何获取网页中json”,找到了参考文献11.以及其他参考文献(这一步百度的东西有点多有点乱,部分整理在参考文献中了,11是比较好的经典的,给了我启示的),我发现问题可能是请求头出错了。
  9. 通过浏览器抓包,找到了返回json的包,发现了返回json的数据包,看到了这个数据包是以post的方式提交给music.bbbbbb.me,然后还有相应的请求头和post的内容,我就把get方法改成了post方法,并且添加上了请求头和请求内容。
  10. 提示json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0),好奇,这时候打印获取内容的结果已经是json文件了,这是啥意思,于是百度了一下这个错误,发现是对json格式理解不深刻,于是又学习测试修改了一下。
  11. 成功写出。

以上就是我造出鱼叉的大致过程,当然只是主要步骤。

具体实现

Python实现抓取并按照一定格式封装为json文件,以便发送给前段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值