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

前言

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

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

爬取过程

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

爬取列表页

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

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

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

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

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

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

爬取详情页

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

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

保存数据

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


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

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

展开阅读全文

页面更新:2024-04-29

标签:数据   爬虫   实战   接口   定义   参数   页面   方法   内容   列表   电影   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top