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之dict()的操作方法
Sep 24 Python
python将ip地址转换成整数的方法
Mar 17 Python
一些Centos Python 生产环境的部署命令(推荐)
May 07 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
Python将视频或者动态图gif逐帧保存为图片的方法
Sep 10 Python
Pytorch对Himmelblau函数的优化详解
Feb 29 Python
django中url映射规则和服务端响应顺序的实现
Apr 02 Python
django rest framework 过滤时间操作
Jul 12 Python
Django实现文章详情页面跳转代码实例
Sep 16 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
Jan 12 Python
pycharm 关闭search everywhere的解决操作
Jan 15 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的ob_start();控制您的浏览器cache!
2007/02/14 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
PHP多线程类及用法实例
2014/12/03 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
2016/11/04 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
Python发送邮件测试报告操作实例详解
2018/12/08 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
在python中画正态分布图像的实例
2019/07/08 Python
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
西安众合通用.net笔试题
2013/03/18 面试题
计算机开发个人求职信范文
2013/09/26 职场文书
计算机本科生自荐信
2013/10/15 职场文书
医药专业推荐信
2013/11/15 职场文书
物流仓管员岗位职责
2013/12/04 职场文书
单位人事专员介绍信
2014/01/11 职场文书
酒店中秋节促销方案
2014/01/30 职场文书
《都江堰》教学反思
2014/02/07 职场文书
单位计划生育责任书
2015/05/09 职场文书
党员公开承诺书2016
2016/03/24 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
Javascript 解构赋值详情
2021/11/17 Javascript