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有序查找算法之二分法实例分析
Dec 11 Python
Python实现时钟显示效果思路详解
Apr 11 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
详解重置Django migration的常见方式
Feb 15 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
tensorflow自定义激活函数实例
Feb 04 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
PyQt5 QDockWidget控件应用详解
Aug 12 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
Feb 24 Python
python实现三次密码验证的示例
Apr 29 Python
Python实现灰色关联分析与结果可视化的详细代码
Mar 25 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中的动态调用实例分析
2015/01/07 PHP
隐性调用php程序的方法
2015/06/13 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
python3 shelve模块的详解
2017/07/08 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
2019/10/12 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
英国复古服装购物网站:Collectif
2019/10/30 全球购物
ktv总经理岗位职责
2014/02/17 职场文书
干部鉴定材料
2014/05/18 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书