浅谈如何使用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插入排序算法的实现代码
Nov 21 Python
使用Python编写类UNIX系统的命令行工具的教程
Apr 15 Python
Python 实现简单的电话本功能
Aug 09 Python
python实现爬虫统计学校BBS男女比例(一)
Dec 31 Python
Python实现获取命令行输出结果的方法
Jun 10 Python
Python使用当前时间、随机数产生一个唯一数字的方法
Sep 18 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
Python字符串逆序的实现方法【一题多解】
Feb 18 Python
Pycharm如何打断点的方法步骤
Jun 13 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
Aug 07 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 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
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
javascript基础知识讲解
2017/01/11 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
Python装饰器知识点补充
2018/05/28 Python
浅谈python写入大量文件的问题
2018/11/09 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
2014年五一活动策划方案
2014/03/15 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
在校实习生求职信
2014/06/18 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
教师工作总结范文2014
2014/11/10 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
Oracle 触发器trigger使用案例
2022/02/24 Oracle
教你部署vue项目到docker
2022/04/05 Vue.js
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis