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爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 Python
python列表操作之extend和append的区别实例分析
Jul 28 Python
Python中scatter函数参数及用法详解
Nov 08 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
python tkinter界面居中显示的方法
Oct 11 Python
解决django同步数据库的时候app models表没有成功创建的问题
Aug 09 Python
TensorFlow设置日志级别的几种方式小结
Feb 04 Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 Python
python 3.8.3 安装配置图文教程
May 21 Python
Python如何读取、写入CSV数据
Jul 28 Python
Python pip install之SSL异常处理操作
Sep 03 Python
scrapy实践之翻页爬取的实现
Jan 05 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配置心得包含MYSQL5乱码解决
2006/11/20 PHP
Php获取金书网的书名的实现代码
2010/06/11 PHP
组合算法的PHP解答方法
2012/02/04 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
JavaScript 继承详解(一)
2009/07/13 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
微信小程序实现滚动消息通知
2018/02/02 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
vue 配置多页面应用的示例代码
2018/10/22 Javascript
详解js静态检查工具eslint配置文件
2018/11/23 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
Python日期时间对象转换为字符串的实例
2018/06/22 Python
python实现支付宝转账接口
2019/05/07 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
设计模式的基本要素是什么
2014/04/21 面试题
通信生自我鉴定
2014/01/18 职场文书
安全生产计划书
2014/05/04 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js