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 相关文章推荐
python3实现TCP协议的简单服务器和客户端案例(分享)
Jun 14 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
python 日志增量抓取实现方法
Apr 28 Python
centos6.8安装python3.7无法import _ssl的解决方法
Sep 17 Python
Python中的枚举类型示例介绍
Jan 09 Python
解决python xx.py文件点击完之后一闪而过的问题
Jun 24 Python
python实现大文本文件分割
Jul 22 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
pymysql 开启调试模式的实现
Sep 24 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
python json.dumps() json.dump()的区别详解
Jul 14 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 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警告Cannot use a scalar value as an array的解决方法
2012/01/11 PHP
php延迟静态绑定实例分析
2015/02/08 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
基于VUE的v-charts的曲线显示功能
2019/10/01 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
Python中用sleep()方法操作时间的教程
2015/05/22 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
python 日期排序的实例代码
2019/07/11 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
优秀毕业生自荐信范文
2014/01/01 职场文书
幼儿园教师备课制度
2014/01/12 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
2019通用版导游词范本!
2019/08/07 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript