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对指定目录下文件进行批量重命名的方法
Apr 18 Python
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
python如何通过protobuf实现rpc
Mar 06 Python
简单谈谈python中的lambda表达式
Jan 19 Python
Python星号*与**用法分析
Feb 02 Python
PyCharm设置护眼背景色的方法
Oct 29 Python
python读取几个G的csv文件方法
Jan 07 Python
Python多线程threading模块用法实例分析
May 22 Python
selenium+python环境配置教程详解
May 28 Python
Python简易计算器制作方法代码详解
Oct 31 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
关于Numpy之repeat、tile的用法总结
Jun 02 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数据结构与算法(PHP描述) 查找与二分法查找
2012/06/21 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
PHP反射实际应用示例
2019/04/03 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
Seajs的学习笔记
2014/03/04 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
2017/10/23 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
Python中除法使用的注意事项
2014/08/21 Python
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
django 环境变量配置过程详解
2019/08/06 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
物业经理求职自我评价
2013/09/22 职场文书
赞美老师的演讲稿
2014/05/22 职场文书
篮球社团活动总结
2014/06/27 职场文书
改进作风怎么办发言材料
2014/08/17 职场文书
承诺书模板
2014/08/30 职场文书
小学体育组工作总结2015
2015/07/21 职场文书
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL