Python实现爬取网页中动态加载的数据


Posted in Python onAugust 17, 2020

在使用python爬虫技术采集数据信息时,经常会遇到在返回的网页信息中,无法抓取动态加载的可用数据。例如,获取某网页中,商品价格时就会出现此类现象。如下图所示。本文将实现爬取网页中类似的动态加载的数据。

Python实现爬取网页中动态加载的数据

1. 那么什么是动态加载的数据?

我们通过requests模块进行数据爬取无法每次都是可见即可得,有些数据是通过非浏览器地址栏中的url请求得到的。而是通过其他请求请求到的数据,那么这些通过其他请求请求到的数据就是动态加载的数据。(猜测有可能是js代码当咱们访问此页面时就会发送得get请求,到其他url中获取数据)

2. 如何检测网页中是否存在动态加载得数据?

在当前页面中打开抓包工具,捕获到地址栏中的url对应的数据包,在该数据包的response选项卡搜索我们想要爬取的数据,如果搜索到了结果则表示数据不是动态加载的,否则表示数据为动态加载的。如图所示:

Python实现爬取网页中动态加载的数据

或者鼠标右键单击要爬取的页面显示网页源代码搜索我们想要爬取的数据,如果搜索到了结果则表示数据不是动态加载的,否则表示数据为动态加载的。如图所示:

Python实现爬取网页中动态加载的数据

3. 如果数据为动态加载,那么我们如何捕获到动态加载的数据?

在实现爬取动态加载的数据信息时,首先需要在浏览器的网络监视器中根据动态加载的技术选择网络请求的类型,然后通过逐个筛选的方式查询预览信息中的关键数据,并获取对应的请求地址,最后进行信息的解析工作即可。具体步骤如下:

在浏览器中快捷键F12打开开发者工具,然后选择Network(网络监视器)并在网络类型中选择JS,再按快捷键F5刷新,如下图所示。

Python实现爬取网页中动态加载的数据

在请求信息的列表中,依次单击每个请求信息,然后在对应的Preview(请求结果预览)中核对是否为需要获取的动态加载数据,如下图所示。

Python实现爬取网页中动态加载的数据

动态加载的数据信息核对完成后,单击Headers获取当前的网络请求地址以及所需参数,如下图所示。

Python实现爬取网页中动态加载的数据

根据以上步骤获取到的请求地址,发送网络请求并从返回的信息中提取商品价格信息。笔者在代码中使用到了反序列化,关于json序列化和反序列化可以点击 此处 进行学习,代码如下:

import requests
import json

# 获取商品价格的请求地址
url = "https://c0.3.cn/stock?skuId=12464037&cat=1713,3259,3333&venderId=1000077923&area" \
  "=4_113_9786_0&buyNum=1&choseSuitSkuIds=&extraParam={%22originid%22:%221%22}&ch=1&fqsp=0&" \
  "pduid=1573698619147398205303&pdpin=jd_635f3b795bb1c&coord=&detailedAdd=&callback=jQuery6495921"
jQuery_id = url.split("=")[-1] + "("
# 头部信息
headers = {
 "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) "
     "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36"
}
# 发送网络请求
response = requests.get(url, headers=headers)
if response.status_code == 200:
 goods_dict = json.loads(response.text.replace(jQuery_id, "")[:-1]) # 反序列化
 print(f"当前售价为: {goods_dict['stock']['jdPrice']['op']}")
 print(f"定价为: {goods_dict['stock']['jdPrice']['m']}")
 print(f"会员价为: {goods_dict['stock']['jdPrice']['tpp']}")
else:
 print("请求失败!")

笔者在写博文的时候,价格发生了变化,运行结果如下图所示:

Python实现爬取网页中动态加载的数据

注意:爬取动态加载数据信息时,需要根据不同的网页使用不同的方式进行数据的提取。如果在运行源码时出现了错误,请根据操作步骤获取新的请求地址即可。

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

Python 相关文章推荐
Python中列表和元组的使用方法和区别详解
Dec 30 Python
TensorFlow 合并/连接数组的方法
Jul 27 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
使用Python开发SQLite代理服务器的方法
Dec 07 Python
PyQt5实现五子棋游戏(人机对弈)
Mar 24 Python
Python2和Python3的共存和切换使用
Apr 12 Python
python队列Queue的详解
May 10 Python
python opencv实现证件照换底功能
Aug 19 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 Python
python 伯努利分布详解
Feb 25 Python
部署Django到阿里云服务器教程示例
Jun 03 Python
为什么python比较流行
Jun 19 Python
Python 如何操作 SQLite 数据库
Aug 17 #Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 #Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 #Python
Python 程序员必须掌握的日志记录
Aug 17 #Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 #Python
Python 如何查找特定类型文件
Aug 17 #Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
Aug 17 #Python
You might like
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
2016/11/25 PHP
让FireFox支持innerText的实现代码
2009/12/01 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
python类型强制转换long to int的代码
2013/02/10 Python
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
Whistles官网:英国女装品牌
2020/08/14 全球购物
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
大专生简历的自我评价
2013/11/26 职场文书
圣诞节红领巾广播稿
2014/02/03 职场文书
社会工作专业自荐信
2014/09/26 职场文书
诉讼授权委托书
2014/10/15 职场文书
防汛工作情况汇报
2014/10/28 职场文书
离职报告格式
2014/11/04 职场文书
优秀班主任材料
2014/12/16 职场文书
医生个人年终总结
2015/02/28 职场文书
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android