浅谈如何使用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 变量类型及命名规则介绍
Jun 08 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
django+echart数据动态显示的例子
Aug 12 Python
python return逻辑判断表达式实现解析
Dec 02 Python
python爬取王者荣耀全皮肤的简单实现代码
Jan 31 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
Feb 26 Python
Django如何使用redis作为缓存
May 21 Python
Python制作数据预测集成工具(值得收藏)
Aug 21 Python
Python实现JS解密并爬取某音漫客网站
Oct 23 Python
python 实现逻辑回归
Dec 30 Python
Python极值整数的边界探讨分析
Sep 15 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
为查询结果建立向后/向前按钮
2006/10/09 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
2014/07/25 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
Javascript操作cookie的函数代码
2012/10/03 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
深入理解Python中的super()方法
2017/11/20 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
Python 发送邮件方法总结
2020/08/10 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
介绍一下except的用法和作用
2015/01/22 面试题
this关键字的作用
2016/01/30 面试题
办公室文员工作职责
2014/01/31 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
2014年团总支工作总结
2014/11/21 职场文书
教师个人考察材料
2014/12/16 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
先进党组织事迹材料
2014/12/26 职场文书
神农溪导游词
2015/02/11 职场文书
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android