爬虫笔记22——当当网图书详情页静、动态数据爬取

server/2024/11/26 21:38:32/

当当网动态数据爬取

  • 静态数据爬取
  • 动态数据爬取
  • 接口参数的获取

静态数据爬取

在这里插入图片描述
进入图书详情,这里的图书数据信息比如标题、价格、图片都是非结构化数据,可以使用xpath语法提取。是很简单的数据采集了,就不细说了。

动态数据爬取

在这里插入图片描述
滑到下面这里的数据,像大图,内容简介等这些,我们通过详情页静态页面数据是找不到对应的数据内容的,而且通过全局搜索我们也找不到对应的内容。这就不好办了。但是作为动态加载的数据,那肯定在返回的接口数据中可以找到对应的内容。

现在我们只能通过一个一个接口看了,不过看接口也是有技巧的,比如这里他有这么长的大图数据,说明这个接口数据的大小不会很小,应该是数据比较大的。
在这里插入图片描述

最终发现是倒数第二个接口数据返回的内容,里面就有我们要的内容。

在这里插入图片描述

说是动态数据,其实返回回来的接口数据也是一个html文本内容。最后我们提取也是可以用xpath语法提取,或者习惯哪种方法就哪种方法提取。

在这里插入图片描述

接口参数的获取

那么这个接口的参数需要传递什么?还有要如何获取这些参数呢?这不同的图书总有各自对应的参数吧。

在这里插入图片描述

经过测试发现,主要这四个参数是变换的,这四个参数在图书详情页静态页面数据里可以找到,这里就可以通过全局搜索找到,我也是通过全局搜索搜到的。

在这里插入图片描述

但是要提取出来就发现这个数据是在js语法里面

在这里插入图片描述

用xpath提取不了,只能通过正则语法把这个参数数据提取出来,直接看代码吧

try:# 先获取详情页数据res = requests.get(url, headers=headers, cookies=cookies)# print(res.status_code)
except requests.exceptions.ProxyError as e:print(f"Proxy error: {e}")
# print(res.text)
book_detail_html = etree.HTML(res.text)
# print(re.findall(r'var prodSpuInfo = (.*);', res.text))
playload = json.loads(re.findall(r'var prodSpuInfo = (.*);', res.text)[0])
# print(playload)
# 在这里获取通过playload载荷请求接口
params = {'r': 'callback/detail','productId': playload['productId'],'templateType': 'publish','describeMap': playload['describeMap'],'shopId': playload['shopId'],'categoryPath': playload['categoryPath'],
}
# 这个作为接口参数
try:detail_res = requests.get('https://product.dangdang.com/index.php', params=params, cookies=cookies,headers=headers)
except requests.exceptions.ProxyError as e:print(f"Proxy error: {e}")

上面就是获取动态数据的所有内容。点个赞吧,大佬!


http://www.ppmy.cn/server/137772.html

相关文章

112. gui辅助调节光源阴影

光源阴影范围,也可以通过GUI界面可视化调节,这样更形象。 阴影范围可视化调节 根据工厂尺寸数量级预先设置.shadow.camera,然后通过GUI调试选择一个合适的值.shadow.camera的位置通过光源的位置调试。.shadow.camera参数改变后,注…

label数据(或自定义数据集)转imagenet(用于mmclassification)

理论上用于分类的图像一般都不需要用labelme来标注的,笔者是因为刚好手上有这么一组数据,所以就顺带处理了。labelme标注完的数据每张还包含了一个json文件,这个在分类任务中用不上。具体的mmclassification使用方法在我的另一篇文章里有&…

基于centos7.9搭建MariaDB10.5高可用集群

MariaDB-HA 环境初始化安装MariaDB配置集群 基于centos7.9搭建MariaDB10.5数据库高可用集群,对标mysql5.7 节点IPnode1192.168.200.101node2192.168.200.102node3192.168.200.103 环境初始化 #!/bin/bash# 定义节点信息 NODES("192.168.200.101 node1"…

C#实现word和pdf格式互转

1、word转pdf 使用nuget: Microsoft.Office.Interop.Word winform页面: 后端代码: //using Spire.Doc; //using Spire.Pdf; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Sy…

部署Prometheus、Grafana、Zipkin、Kiali监控度量Istio

1. 模块简介 Prometheus 是一个开源的监控系统和时间序列数据库。Istio 使用 Prometheus 来记录指标,跟踪 Istio 和网格中的应用程序的健康状况。Grafana 是一个用于分析和监控的开放平台。Grafana 可以连接到各种数据源,并使用图形、表格、热图等将数据…

Nginx 的 Http 模块介绍(中)

1. preaccess 阶段 在 preaccess 阶段在 access 阶段之前,主要是限制用户的请求,比如并发连接数(limit_conn模块)和每秒请求数(limit_req 模块)等。这两个模块对于预防一些攻击请求是很有效的。 1.1 limi…

如何将MySQL彻底卸载干净

目录 背景: MySQL的卸载 步骤1:停止MySQL服务 步骤2:软件的卸载 步骤3:残余文件的清理 步骤4:清理注册表 步骤五:删除环境变量配置 总结: 背景: MySQL卸载不彻底往往会导致重新安装失败…

【自动化测试】APP UI 自动化(安卓)-本地环境搭建

一、软件准备及版本介绍 软件版本JAVA-SDK1.8.0_181 python 3.10.10 Android SDK Tools 下最新版本即可,无特殊要求 PyCharm 2023.3.5(下最新版本即可,无特殊要求) 二、安装步骤及环境变量配置 2.1 Java安装及配置 1&am…