python3 爬虫 之只需要问题id爬取知乎问题全部回答

先打个定心丸,本文所需要的技术点真的不难,我本来想要直接放代码的,但发现这次的不像之前写过的《 》那样需要解码,所以这次想一步一步来教你实现。

首先要明白的一点

现在大多数网站在返回数据时,并没有一下子返回全部的数据,而是通过Ajax分批返回数据,所以我们可以利用这一点,找到触发返回数据的规律,获取动态返回的数据。

获取动态请求数据的url

打开一个知乎多一点回答的问题:

python3 爬虫 之只需要问题id爬取知乎问题全部回答

向下滑动查看回答,注意右侧浏览器的滚动条,它每次滑动到距离顶部一定的距离会向上返回一点距离,此时就是在动态加载回答数据了:

python3 爬虫 之只需要问题id爬取知乎问题全部回答

按F12查看上一步浏览器之怎么把数据动态请求数据的:

python3 爬虫 之只需要问题id爬取知乎问题全部回答

通过观察得到,当浏览器滚动条滚动到距离底部一定的距离会动态请求下面箭头所指的链接并加载数据,而且只有红色矩形的数字变化(一次增加5):

python3 爬虫 之只需要问题id爬取知乎问题全部回答

通过观察上面图片中的的红色矩形,发现整个请求url只有红色矩形的数字按每次增加5在变化,这样我们就获取到我们想要的请求url了:

python3 爬虫 之只需要问题id爬取知乎问题全部回答

探索下动态请求的url,有小惊喜

在浏览器中打开上面的链接:

python3 爬虫 之只需要问题id爬取知乎问题全部回答

数据很乱怎么办?没事,我们有Json在线解析与格式: https://www.json.cn/ :

python3 爬虫 之只需要问题id爬取知乎问题全部回答

发现个”小惊喜“,可以判断请求的数据是否请求完,稍微做下判断就可以动态爬取数据了,当然你可以根据前面说的没请求一次就增加5来实现,但是我还是喜欢前者:

python3 爬虫 之只需要问题id爬取知乎问题全部回答

开始编码

先写一个模拟前面把url复制到浏览器中请求的函数:

python3 爬虫 之只需要问题id爬取知乎问题全部回答

再写一个解析数据的函数:

python3 爬虫 之只需要问题id爬取知乎问题全部回答

然后再写一个判断是是否爬取完数据、获取下个url的函数:

python3 爬虫 之只需要问题id爬取知乎问题全部回答

真正开始爬取:

python3 爬虫 之只需要问题id爬取知乎问题全部回答

写在后面,本文主要是带大家走一遍流程,如果需要爬取其他的问题直接换问题的id就可以了。源码可以点击下面的拓展连接查看GitHub,最后喜欢的可以点个赞啥的和关注我一起学习python相关技术。


分享到:


相關文章: