先打个定心丸,本文所需要的技术点真的不难,我本来想要直接放代码的,但发现这次的不像之前写过的《Python3 + 教你只需要网易云音乐id + 爬取全部评论 + 生成词云图》那样需要解码,所以这次想一步一步来教你实现。
首先要明白的一点
现在大多数网站在返回数据时,并没有一下子返回全部的数据,而是通过Ajax分批返回数据,所以我们可以利用这一点,找到触发返回数据的规律,获取动态返回的数据。
获取动态请求数据的url
打开一个知乎多一点回答的问题:
![8431e0e75ec5c421b1d12e2e6346a07b.png](https://i-blog.csdnimg.cn/blog_migrate/c8b24d8fe34c128a251ebe6eb61b64ab.jpeg)
向下滑动查看回答,注意右侧浏览器的滚动条,它每次滑动到距离顶部一定的距离会向上返回一点距离,此时就是在动态加载回答数据了:
![7079905317c73bf3dcab49e796ae810b.gif](https://i-blog.csdnimg.cn/blog_migrate/ec36c7e15fb7bf5cf42b054b89eee077.gif)
按F12查看上一步浏览器之怎么把数据动态请求数据的:
![51e73329a747e631fbecfb56555f9ad2.gif](https://i-blog.csdnimg.cn/blog_migrate/d2ad6b68b1b35cd9a555e6037328322c.gif)
通过观察得到,当浏览器滚动条滚动到距离底部一定的距离会动态请求下面箭头所指的链接并加载数据,而且只有红色矩形的数字变化(一次增加5):
![e7ff51b3d680cd0c4bee5bc26bce5f9a.png](https://i-blog.csdnimg.cn/blog_migrate/8be944eeed1576b64b4decee61ecad2f.jpeg)
通过观察上面图片中的的红色矩形,发现整个请求url只有红色矩形的数字按每次增加5在变化,这样我们就获取到我们想要的请求url了:
![68a514691496e5d2dcf099f26da1cf66.png](https://i-blog.csdnimg.cn/blog_migrate/4949349c47fe551a63623bb98d6cc2f3.jpeg)
探索下动态请求的url,有小惊喜
在浏览器中打开上面的链接:
![71277f96e9e1959fcbddb526ac0bd9df.png](https://i-blog.csdnimg.cn/blog_migrate/aac7d753a629d81c528f0c26b6b288aa.jpeg)
数据很乱怎么办?没事,我们有Json在线解析与格式: https://www.json.cn/ :
![093a13efd281a0455de4585dde828a0c.png](https://i-blog.csdnimg.cn/blog_migrate/e97e63153d5caa911a19cb0a0cff323a.jpeg)
发现个”小惊喜“,可以判断请求的数据是否请求完,稍微做下判断就可以动态爬取数据了,当然你可以根据前面说的没请求一次就增加5来实现,但是我还是喜欢前者:
![c6e14f53c96889a7ef7b21f3b3d92ac0.png](https://i-blog.csdnimg.cn/blog_migrate/6330b20311fdd86917513a0ad2623514.jpeg)
开始编码
先写一个模拟前面把url复制到浏览器中请求的函数:
![c76792b48d9eb513200f420569099566.png](https://i-blog.csdnimg.cn/blog_migrate/d70c24c8eaf94cc023bf2372a1673532.jpeg)
再写一个解析数据的函数:
![da86d94bd8a8a301908841229f6e5e40.png](https://i-blog.csdnimg.cn/blog_migrate/f9e9c0f43c59e5b76a2437f604de04d8.jpeg)
然后再写一个判断是是否爬取完数据、获取下个url的函数:
![5b941f8475ae225a5b630ad4c2058b11.png](https://i-blog.csdnimg.cn/blog_migrate/de95a86d7d8be9d095c8e6b880df7474.jpeg)
真正开始爬取:
![715d4f261830cd0dc3af27d46312e8c7.png](https://i-blog.csdnimg.cn/blog_migrate/1944e546f448daa0d13d0ca96a6a9608.jpeg)
写在后面,本文主要是带大家走一遍流程,如果需要爬取其他的问题直接换问题的id就可以了。源码可以点击下面的拓展连接查看GitHub,最后喜欢的可以点个赞啥的和关注我一起学习python相关技术。