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实现端口转发器的方法
Mar 13 Python
windows下ipython的安装与使用详解
Oct 20 Python
Python 闭包的使用方法
Sep 07 Python
详解python里使用正则表达式的全匹配功能
Oct 19 Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
pandas实现将日期转换成timestamp
Dec 07 Python
python将时分秒转换成秒的实例
Dec 07 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
Mar 25 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
Jun 11 Python
Python3.9新特性详解
Oct 10 Python
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 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
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
javascript使用appendChild追加节点实例
2015/01/12 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
Vue核心概念Action的总结
2019/01/18 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
python实现清屏的方法
2015/04/30 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Python3中使用PyMongo的方法详解
2017/07/28 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
Django实现文件上传下载
2019/10/06 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
如何使用python写截屏小工具
2020/09/29 Python
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
自荐信模板大全
2015/03/27 职场文书
大学生读书笔记范文
2015/07/01 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
详解如何用Python实现感知器算法
2021/06/18 Python
MySQL 十大常用字符串函数详解
2021/06/30 MySQL
javascript的var与let,const之间的区别详解
2022/02/18 Javascript
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers
Windows7下FTP搭建图文教程
2022/08/05 Servers