Python实现爬取网页中动态加载的数据

作者:Amo Xiang 时间:2021-08-11 18:35:27 

在使用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实现爬取网页中动态加载的数据

注意:爬取动态加载数据信息时,需要根据不同的网页使用不同的方式进行数据的提取。如果在运行源码时出现了错误,请根据操作步骤获取新的请求地址即可。

来源:https://blog.csdn.net/xw1680/article/details/105870220

标签:python,爬取,动态数据
0
投稿

猜你喜欢

  • Python数据分析中Groupby用法之通过字典或Series进行分组的实例

    2023-03-08 12:56:01
  • 什么是XML

    2008-09-05 17:21:00
  • windows server 2003+IIS6 出现 'ASP 不正常,因为执行请求

    2010-05-07 11:02:00
  • 用途相似的标签

    2008-05-23 13:11:00
  • 用python编写一个图片拼接工具

    2023-09-01 18:31:52
  • 什么是JSON及JSON的结构

    2008-06-15 07:16:00
  • 富文本编辑器的基本原理与实践

    2008-06-13 13:28:00
  • SQL学习笔记一SQL基础知识

    2011-09-30 11:24:33
  • python3实现ftp服务功能(客户端)

    2023-05-28 00:36:31
  • 如何解决从文本文件中调出记录出现丢失换行的问题?

    2009-12-03 20:25:00
  • python 实现视频 图像帧提取

    2023-12-30 19:29:40
  • Oracle 10G:PL/SQL正规表达式(正则表达式)手册

    2009-07-02 12:33:00
  • 使用 Python 实现文件递归遍历的三种方式

    2022-08-19 18:49:08
  • Javascript——浅析注册事件

    2008-08-19 12:44:00
  • Python使用reportlab将目录下所有的文本文件打印成pdf的方法

    2022-01-23 11:36:11
  • 使用Python的networkx绘制精美网络图教程

    2022-10-31 06:52:47
  • 基于Python实现牛牛套圈小游戏的示例代码

    2022-04-04 03:50:23
  • python提取照片坐标信息的实例代码

    2023-06-01 16:37:10
  • Python高阶函数、常用内置函数用法实例分析

    2023-01-24 17:36:58
  • python的set处理二维数组转一维数组的方法示例

    2022-03-30 12:37:02
  • asp之家 网络编程 m.aspxhome.com