大家好,欢迎来到IT知识分享网。
前言
我们这次主要实现对 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:
运行脚本,可以看到爬取成功,并成功存储数据,没有任何报错信息。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/52809.html