龙空技术网

爬虫实战(二)爬取Ajax数据

阿甘coding 146

前言:

此刻你们对“ajax解析多层json数据”大概比较重视,看官们都想要了解一些“ajax解析多层json数据”的相关内容。那么小编在网络上网罗了一些关于“ajax解析多层json数据””的相关资讯,希望姐妹们能喜欢,我们快快来学习一下吧!

前言

我们这次主要实现对 Ajax 数据的爬取,网站链接为:,该实例网站的数据是通过Ajax 完成的,页面的内容是通过JaveScrip渲染出来的,如下图所示:

我们这次爬取的数据包括电影的名称、封面、类别、上映日期、评分、剧情等信息。需要将数据爬取下来然后保存在 MongoDB 数据库中。

爬取过程

我们通过 requests 直接提取页面,在提取的结果中只有一点 HTML 内容,主要是一些 javascript和css文件,并没有观察到任何电影数据信息。遇到这种情况,说明我们看到的整个页面都是JavaScript渲染得到的,里面的电影数据一般是通过 Ajax 加载的,JavaScript在后台调用 Ajax 数据接口,得到数据之后,再对数据进行解析并渲染呈现出来。想要爬取这个页面数据,直接爬取 Ajax 接口,再获取数据就好了。

爬取列表页

我们分析列表页的 Ajax 接口逻辑,打开浏览器开发者工具,切换到 Network 面板,勾选 Preserve Log并切换到 XHR 选项卡,接着重新刷新页面,再点击第二页,这时可以观察到不仅页面上的数据发生了变化,开发者工具下方页监听到几个Ajax请求,如下图所示:

我们点开一个Ajax请求,其接口的请求

URL为: ,通过观察多个 Ajax 接口的参数,我们总结出这么一个规律,limit 一直为10,正好对应每页10条数据,offset 再依次变大,页数每加1,offset 就加10,因此其代表页面的数据偏移量。这样的话,我们只需要构造出所有页面的 Ajax 接口,就可以轻松获取所有页面的数据了。

我们先定义一个 scrape api 方法,这个方法用来实现对一个 Ajax 接口数据的获取,这是一个通用的方法,返回的内容为一个 JSON 字符串。

接着我们定义一个爬取列表页的方法:acrape index,它接收一个参数page,该参数代表列表页的页码。

这样我们就完成了列表页的爬取,每次发生 Ajax 请求都会得到 10 电影数据信息。

爬取详情页

虽然我们已经可以拿到每一页的电影数据,但是这项数据实际上还缺少一些我们想要的信息,如剧情简介等,所有需要进一步进入详情页来获取这些内容。以查看列表页同样的方法查看详情页调用的Ajax接口,可以发现详情页的接口URL为:

,后面的40为每部电影的id,接着,我们就定义一个详情页的爬取逻辑,定义一个scrape_detail 方法,它接收一个参数id,先构造一个真实的详情页 Ajax 请求的 URL,再直接调用 scrape api 方法传入这个url 即可。

保存数据

我们将数据保存在 MongoDB数据库中,具体代码如下:

最后定义一个总的调用方法main:

运行脚本,可以看到爬取成功,并成功存储数据,没有任何报错信息。

标签: #ajax解析多层json数据