在使用python爬虫技术采集数据信息时,经常会遇到在返回的网页信息中,无法抓取动态加载
的可用数据。例如,获取某网页中,商品价格时就会出现此类现象。如下图所示。本文将实现爬取网页中类似的动态加载
的数据。
1. 那么什么是动态加载的数据"color: #ff0000">2. 如何检测网页中是否存在动态加载得数据"text-align: center">
或者鼠标右键单击要爬取的页面显示网页源代码
搜索我们想要爬取的数据,如果搜索到了结果则表示数据不是动态加载的,否则表示数据为动态加载的。如图所示:
3. 如果数据为动态加载,那么我们如何捕获到动态加载的数据?
在实现爬取动态加载
的数据信息时,首先需要在浏览器的网络监视器中根据动态加载的技术选择网络请求的类型,然后通过逐个筛选的方式查询预览信息中的关键数据,并获取对应的请求地址,最后进行信息的解析工作即可。具体步骤如下:
在浏览器中快捷键F12
打开开发者工具
,然后选择Network(网络监视器)
并在网络类型中选择JS
,再按快捷键F5
刷新,如下图所示。
在请求信息的列表中,依次单击每个请求信息,然后在对应的Preview(请求结果预览)
中核对是否为需要获取的动态加载
数据,如下图所示。
动态加载
的数据信息核对完成后,单击Headers
获取当前的网络请求地址以及所需参数,如下图所示。
根据以上步骤获取到的请求地址,发送网络请求并从返回的信息中提取商品价格信息。笔者在代码中使用到了反序列化,关于json序列化和反序列化可以点击 此处 进行学习,代码如下:
import requests import json # 获取商品价格的请求地址 url = "https://c0.3.cn/stock" "=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("请求失败!")
笔者在写博文的时候,价格发生了变化,运行结果如下图所示:
注意
:爬取动态加载
数据信息时,需要根据不同的网页使用不同的方式进行数据的提取。如果在运行源码时出现了错误,请根据操作步骤获取新的请求地址即可。