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程序中使用Cookie的教程
Apr 30 Python
Python中的一些陷阱与技巧小结
Jul 10 Python
python中PIL安装简单教程
Apr 21 Python
python中的字典使用分享
Jul 31 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
Python线程下使用锁的技巧分享
Sep 13 Python
python实现键盘控制鼠标移动
Nov 27 Python
Python模块、包(Package)概念与用法分析
May 31 Python
python 生成器和迭代器的原理解析
Oct 12 Python
python实现简单的购物程序代码实例
Mar 03 Python
jupyter notebook 增加kernel教程
Apr 10 Python
用python批量移动文件
Jan 14 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中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
php下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
Jquery中对数组的操作代码
2011/08/12 Javascript
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
vue移动端弹框组件的实例
2018/09/25 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
Python写的一个简单DNS服务器实例
2014/06/04 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
Python生成器以及应用实例解析
2018/02/08 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
HTML5的语法变化介绍
2013/08/13 HTML / CSS
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
SQL Server笔试题
2012/01/10 面试题
2014报到证办理个人委托书
2014/10/08 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
竞聘书的秘诀
2019/04/02 职场文书
alibaba seata服务端具体实现
2022/02/24 Java/Android
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电