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 22 Python
在Python中编写数据库模块的教程
Apr 29 Python
python中字符串前面加r的作用
Jun 04 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
Jul 15 Python
AI人工智能 Python实现人机对话
Nov 13 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
对python中大文件的导入与导出方法详解
Dec 28 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
PyTorch的SoftMax交叉熵损失和梯度用法
Jan 15 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
Python实现王者荣耀自动刷金币的完整步骤
Jan 22 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+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
Laravel框架Eloquent ORM删除数据操作示例
2019/12/03 PHP
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
关于Layui Table隐藏列问题
2019/09/16 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
python多线程同步之文件读写控制
2021/02/25 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
教师评语大全
2014/04/28 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
返乡农民工证明
2015/06/24 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书
threejs太阳光与阴影效果实例代码
2022/04/05 Javascript
Python中re模块的元字符使用小结
2022/04/07 Python
Go语言 详解net的tcp服务
2022/04/14 Golang