爬虫系列(二) Chrome抓包分析

在这篇文章中,我们将尝试使用直观的网页分析工具(Chrome 开发者工具)对网页进行抓包分析

1、测试环境

浏览器:Chrome 浏览器

浏览器版本:67.0.3396.99 (正式版本) (32 位)

网页分析工具:开发者工具

2、网页分析

(1)网页源代码分析

我们知道,网页有静态网页和动态网页之分,很多人会误认为静态网页就是没有动态效果的网页,其实这种说法是不对的

  • 静态网页 是指没有后台数据库的不可交互网页 ,常以 .htm.html.xml 为后缀

  • 动态网页 是指能与后台数据库进行数据传递的可交互网页,常以 .aspx.asp.jsp.php 为后缀

另外,目前很多动态网站都采取了 异步加载技术 (Ajax),这就是很多时候抓取到的源代码和网站显示的源代码不一致的原因

至于如何爬取动态网页,这里提供两种方法:

  • 一是下面即将讲到的通过抓包分析 Ajax 请求

  • 二是利用 Selenium 等工具进行动态渲染,这个可以参考我的另一篇文章 —— selenium的基本使用


下面我们以京东商品为例,分析如何通过 Chrome 进行抓包,我们首先打开某个商品的首页

https://item.jd.com/10072615543.html

在这里插入图片描述

来到网页空白处单击鼠标右键,选择 查看网页源代码(或者使用快捷键 Ctrl+U 直接打开)

请注意,查看网页源代码 得到的是网站最原始的源代码,也就是通常我们抓取到的源代码

在这里插入图片描述

再次来到网页空白处单击鼠标右键,选择 检查(或者使用快捷键 Ctrl+Shift+I / F12直接打开)

请注意,检查 得到的是是经过 Ajax 加载和 JavaScript 渲染的源代码,也就是当前网站显示内容的源代码

在这里插入图片描述

经过对比之后,我们可以发现两者的内容是不一样的,这就是 异步加载技术 (Ajax) 的典型例子

就目前来说至少京东商品的价格是通过异步加载生成的,这里提供三种方法判断网页中某个内容是否为动态生成:

  • 一是分析 查看网页源代码 生成的源代码,可以在其中寻找动态请求的典型语句,也可以将其与 检查 生成的源代码进行比较

  • 二是通过以下将要讲解的网页抓包分析来判断,这种方法最为常用,应当好好掌握

  • 三是一种取巧的方法,就是禁用 Chrome 浏览器的 JavaScript 加载

    具体可以在 Chrome 的地址栏中输入 chrome://settings/content/javascript 来到 JavaScript 的设置页面

    然后将 JavaScript 的选项关闭,这时候重新刷新网页,就会看到原来显示价格的地方出现了空白

    这就表明原来的价格是通过 JavaScript 动态生成的

在这里插入图片描述

(2)网页抓包分析

我们还是以京东商品为例进行讲解,打开某个商品的首页,尝试抓取动态加载的商品价格数据

https://item.jd.com/10072615543.html

使用快捷键 Ctrl+Shift+IF12打开开发者工具,然后选择 Network 选项卡 进行抓包分析

此时按下快捷键 F5 刷新页面,可以看到开发者工具中出现了各种各样的包,我们使用 Filter 对包进行过滤

在这里插入图片描述

首先,我们选中 Doc,可以看到列表中只出现了一个包

一般来说,这个就是浏览器接收到的第一个包,用于获取请求网站的原始源代码

点击 Header 可以看到它的头部参数设置

点击 Response 可以看到返回的源代码,容易发现,它其实和 查看网页源代码 返回的信息是一致的

在这里插入图片描述

下面让我们重新回到正题,对于动态加载的抓包分析,主要看 XHRJS 选项卡即可

选中 JS 进行过滤,发现列表中出现了好多包,经过分析,我们筛选出下图中加标记的包

这个包返回的是关于价格的信息,可是经过仔细分析发现,这些价格并不是属于当前商品的,而是属于相关商品的

在这里插入图片描述

但是怎么说这个包还是和价格相关的,我们还是先看看这个包的请求 URL 吧

https://p.3.cn/prices/mgets?callback=jQuery1609108&type=1&area=1_72_2799_0&pdtk=&pduid=1539779074977382417990&pdpin=&pin=null&pdbp=0&skuIds=J_25630711066%2CJ_26395831446%2CJ_20823451030%2CJ_11332156897%2CJ_14020547214%2CJ_26498549638&ext=11100000&source=item-pc

对包括 callback 等不必要的参数进行筛选,可以得到简单而有效的 URL

https://p.3.cn/prices/mgets?skuIds=J_25630711066%2CJ_26395831446%2CJ_20823451030%2CJ_11332156897%2CJ_14020547214%2CJ_26498549638

直接用浏览器打开该 URL,可以看到返回的的确是包含价格信息的 JSON 数据(只可惜是其他商品的价格)

在这里插入图片描述

分析该 URL 的参数,可以推测 skuId 应该就是每一个商品独一无二的标志了,那么我们所需要的商品的 skuId 究竟可以在哪里找到呢?

事实上 SKU 是一个在物流、运输等产业中常用的缩写,其全称是 Stock Keeping Unit(库存量单位)

即库存进出计量的基本单元,现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的 SKU

回顾我们刚开始进入的商品首页,https://item.jd.com/10072615543.html

这其中不是就隐藏着当前商品的唯一号码标识(10072615543)了吗?不妨一试!

果然,访问商品价格的完整 URL 我们就可以得到了,https://p.3.cn/prices/mgets?skuIds=10072615543

通过直接访问该网址我们就可以得到当前商品的价格信息

在这里插入图片描述

事实上,我们还可以对该 URL 进行适当的泛化以适应京东所有商品的价格爬取

很简单,只需要将 skuIds 作为参数独立分离出来即可,https://p.3.cn/prices/mgets?skuIds={ID}

通过泛化后的 URL ,理论上只要能得到商品的 skuId,我们就可以访问对应商品的价格

  • 10
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Python爬虫抓包是指使用Python编写程序来模拟浏览器发送请求,并获取返回的数据和信息。通过抓包可以获取网页的内容、图片、视频等资源,以及网页的响应状态码、头部信息等。 要实现Python爬虫抓包,可以使用以下步骤: 1. 安装requests库:使用pip工具安装requests库,该库是Python中用于发送HTTP请求的常用库。 2. 导入requests库:在Python程序中导入requests库,以便使用其中的功能。 3. 发送HTTP请求:使用requests库中的get()方法来发送GET请求。通过传入目标网页的URL作为参数,可以向目标网站发送请求,并获取返回的响应对象。 4. 获取响应内容:通过访问响应对象的text属性,可以获取到网页的HTML内容。如果需要获取其他类型的资源,可以使用响应对象的content属性。 5. 解析网页内容:如果需要从网页中提取特定的信息,可以使用相关的解析库,如BeautifulSoup、lxml等。这些库可以帮助我们解析网页的HTML结构,从中提取出需要的数据。 6. 设置请求头:为了模拟浏览器的行为,可以设置请求头中的关键内容,如User-Agent、Cookie等。这样可以使得请求更像是来自于浏览器,提高爬取数据的成功率。 综上所述,可以使用Python中的requests库来发送HTTP请求,并通过解析网页内容来实现爬虫抓包的功能。在编写代码时,可以参考使用json.dumps()函数将字典转化为JSON格式,以及使用urllib.parse模块中的urlencode函数来进行URL编码的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值