浅谈如何使用python抓取网页中的动态数据实现


Posted in Python onAugust 17, 2020

我们经常会发现网页中的许多数据并不是写死在HTML中的,而是通过js动态载入的。所以也就引出了什么是动态数据的概念,动态数据在这里指的是网页中由Javascript动态生成的页面内容,是在页面加载到浏览器后动态生成的,而之前并没有的。

在编写爬虫进行网页数据抓取的时候,经常会遇到这种需要动态加载数据的HTML网页,如果还是直接从网页上抓取那么将无法获得任何数据。

今天,我们就在这里简单聊一聊如何用python来抓取页面中的JS动态加载的数据。

给出一个网页:豆瓣电影排行榜,其中的所有电影信息都是动态加载的。我们无法直接从页面中获得每个电影的信息。

如下图所示,我们无法在HTML中找到对应的电影信息。

浅谈如何使用python抓取网页中的动态数据实现

浅谈如何使用python抓取网页中的动态数据实现

在Chrome浏览器中,点击F12,打开Network中的XHR,我们来抓取对应的js文件来进行解析。如下图:

浅谈如何使用python抓取网页中的动态数据实现

在豆瓣页面向下拖拽,使得页面加载入更多的电影信息,从而我们可以抓取对应的报文。

我们可以看到它采用的是AJAX异步请求。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。因此就可以在不重新加载整个网页的情况下,对网页的某部分进行更新,从而实现数据的动态载入。

浅谈如何使用python抓取网页中的动态数据实现

我们可以看到,通过GET,我们得到的response之中包含了所对应的电影相关信息,它们以JSON的格式保存在一起。

浅谈如何使用python抓取网页中的动态数据实现

查看一下RequestURL信息,我们可以发现在action参数之后又跟了两个参数"start"和"limit",很显然它们的意思是:"从某个位置开始返回的电影的个数"。

如果想快速获取相关的电影信息,就可以直接把这个URL复制进地址栏,修改你所需要的start和limit参数值,将得到对应的结果进行抓取即可。

但是这样显得很不自动化,而且很多其他网站的RequestURL并不给的这么直接,所以我们接下来用python进行进一步的操作来获取这个返回的报文信息。

#coding:utf-8
import urllib
import requests

post_param = {'action':'','start':'0','limit':'1'}
return_data = requests.get("https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90",data =post_param, verify = False)
print return_data.text

因为豆瓣是https的,所以我们在此处需要稍微注意一下,将verify置为False表示不需要验证SSL证书。

我们可以发现打印出的结果中就是对应的JSON文件,下一步的解析和操作在这里就不赘述了。

[{"rating":["9.6","50"],"rank":1,"cover_url":"https://img3.doubanio.com\/view\/movie_poster_cover\/mpst\/public\/p480747492.jpg","is_playable":true,"id":"1292052","types":["犯罪","剧情"],"regions":["美国"],"title":"肖申克的救赎","url":"https:\/\/movie.douban.com\/subject\/1292052\/","release_date":"1994-09-10","actor_count":15,"vote_count":713205,"score":"9.6","actors":["蒂姆·罗宾斯","摩根·弗里曼","鲍勃·冈顿","威廉姆·赛德勒","克兰西·布朗","吉尔·贝罗斯","马克·罗斯顿","詹姆斯·惠特摩","杰弗里·德曼","拉里·布兰登伯格","尼尔·吉恩托利","布赖恩·利比","大卫·普罗瓦尔","约瑟夫·劳格诺","祖德·塞克利拉"],"is_watched":false}]

到此这篇关于浅谈如何使用python抓取网页中的动态数据实现的文章就介绍到这了,更多相关python抓取网页动态数据 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python获取文件ssdeep值的方法
Oct 05 Python
python的mysqldb安装步骤详解
Aug 14 Python
Django项目开发中cookies和session的常用操作分析
Jul 03 Python
pyqt5的QWebEngineView 使用模板的方法
Aug 18 Python
Python sorted函数详解(高级篇)
Sep 18 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
对python多线程SSH登录并发脚本详解
Feb 14 Python
详解Python是如何实现issubclass的
Jul 24 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
简单了解如何封装自己的Python包
Jul 08 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 Python
详解Python 中的容器 collections
Aug 17 #Python
Python 解析库json及jsonpath pickle的实现
Aug 17 #Python
Python实现爬取网页中动态加载的数据
Aug 17 #Python
Python 如何操作 SQLite 数据库
Aug 17 #Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 #Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 #Python
Python 程序员必须掌握的日志记录
Aug 17 #Python
You might like
PHP&MYSQL服务器配置说明
2006/10/09 PHP
php实现简单爬虫的开发
2016/03/28 PHP
php中关于换行的实例写法
2019/09/26 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
2015/12/08 Javascript
js获取url传值的方法
2015/12/18 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
Vue实现日历小插件
2019/06/26 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
Vue项目移动端滚动穿透问题的实现
2020/05/19 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
Python动态加载模块的3种方法
2014/11/22 Python
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
使用C++扩展Python的功能详解
2018/01/12 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
品牌转让协议书
2014/08/20 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
刑事案件上诉状
2015/05/23 职场文书
被告代理词范文
2015/05/25 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL
HTML+JS实现在线朗读器
2022/02/15 Javascript
vue elementUI批量上传文件
2022/04/26 Vue.js