chapter10-让你拥有“火眼金睛”的 Fiddr4 和其他工具

在前面的课程中,我们通过一个简单的天气预报服务,拓展了如何使用邮件、短信,以及部署在服务器上,完整的开发了一款可以正式使用的小程序。但是有的同学可能也会产生抱怨:这门课不是是爬虫入门吗?为什么讲的爬虫技术这么少呢?因此,本篇文章主要介绍我们接下来要使用,也是以后我们日常开发中经常用到的爬虫技术。同时,本文也简短的介绍一款网页分析利器fiddler4,方便我们“拨开”网页的云雾“。本文所涉及到的代码,你仍然可以从本门课程的Github页面上获取,同时也欢迎大家在讨论区进行讨论!

Ajax——让人爱让人恨的开发技术

如果同学们课后使用之前我们学到的爬虫技术,爬取某些热门网站的话,可能会出现这样一种问题——爬取到的内容,和自己看到的内容不一样。
如果你没遇到上述的情况,那请回忆一下,当我们访问GitChat首页,一直下滑我们的鼠标,发现首页能够展示刚打开网页时未显示的数据:
在这里插入图片描述

我们可以看到,当我们使用鼠标将网页拖到最下面时,页面会立刻载入新的内容——这些内容是我们刚开始访问的时候,并不存在的。有心的同学可能也发现当页面加载新的内容的时候,左下角也会相应的显示出网页URL。
那么,到底什么是Ajax呢?

Ajax 是一种用于创建快速动态网页的技术。
Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。

简单的来说,Ajax能够只加载网页的部分内容,一方面提高了网页显示的速度,另一方面也让我们的获取信息变得困难——Ajax让开发人员减少了工作量,让我们这些爬虫新手增加了难度。接下来,让我们解决这个问题。

Chrome——不仅仅是浏览器这么简单

从开始到现在,本门课程一直使用的是Chrome浏览器——除了它的确速度快、可以安装第三方插件外,最重要的是,它内置的"检查"功能,强大到甚至我们都不需要专业的网页分析工具。
在这里插入图片描述

接下来我们就要使用Chrome的检查功能,解析Ajax的数据。

注意!本文仅仅从技术角度分析如何解决Ajax加载数据的问题。

我们爬取的网页默认为GitChat首页,尝试获取其所加载的课程标题。
我们在之前就已经确认了该首页使用了Ajax技术,为了确定我们爬取的URL,我们在Chrome中,依次右击->检查->network栏,看它究竟是怎么加载的。
在这里插入图片描述

我们可以看到每次我们下拖网页时,系统就会通过Ajax加载对应的网页:
在这里插入图片描述

通过分析我们不难发现,在标注的绿色区域,系统分别加载了对应的数据,同时在下面,我们可以看到加载的网页,其实是存在一定的规律的:

https://gitbook.cn/chat/activity/40/60?  加载40-60序号的数据
https://gitbook.cn/chat/activity/60/80?  加载60-80序号的数据
https://gitbook.cn/chat/activity/80/100? 加载80-100序号的数据

让我们尝试直接访问一个网址:
在这里插入图片描述

返回的是一个Json格式的数据,让我们使用Python去解析它:

import requests
import json
import re
url = 'https://gitbook.cn/chat/activity/80/100?'response = requests.get(url)
content  = json.loads(response.text)  ##将返回的数据以Json格式存储
data = content['data']
print(data)

看上去我们想要获取的数据都已经完成了,那么,真正打印出来的数据是什么呢?

<div style="padding:0;border-bottom: 1px solid #f5f5f5;" class="col-md-12"><a href="/gitchat/activity/5b401bcd920199317157e6ab"><div style="border:0;padding:0;" class="mazi-item"><div style="padding: 10px 0 10px 0;" class="item-name-cardV2"><img src="https://images.gitbook.cn/80f5c370-516b-11e7-b840-9125653bdbb4" class="item-author-thumbV2"/><div class="item-author-ndV2"><div class="item-titleV2">软件测试从业者18条可行性发展路径</div><div style="padding-top: 3px;" class="item-author-nameV2">IDO老徐</div><div class="item-author-descV2">测试经理</div></div></div><div style="margin: 0 0 8px -10px;" class="mazi-item-bottom"><div style="margin-left:8px;display: inline;"><span class="icon2 lnr-user"></span><span class="text">30</span></div><a href="/?categoryId=58e84f1584c651693437f27c" class="textTag category">职场</a>.....

可以发现,我们真正得到的,只是网页的代码,并没有真正获取到标题。这个时候,我们就要使用我们之前提到过的,但是从来未使用的技术——正则表达式:

import re
url = re.findall('/gitchat/activity/\S{24}',data)
print(len(url))

在上述的代码中,我们导入了re模块,并且使用findall()函数,查找符合正则表达式的课程地址,让我们看现在打印什么吧:

['/gitchat/activity/5b401bcd920199317157e6ab', '/gitchat/activity/5b3aca0819d0a05d47ecc544', '/gitchat/activity/5b3dd77505765f300a81bfe0', '/gitchat/activity/5b4202fe13a6987360cdd26e', '/gitchat/activity/5b42ab12b840d242d3ee2232', '/gitchat/activity/5b42aac8326c9140b77d9081', '/gitchat/activity/5b42d4e64d8d8f115b62c585', .....

Bingo!我们成功获得了网址的地址,那么我们访问对应的网址,就可以获取到了Ajax加载的课程标题啦!什么?你还想看怎么获取标题的?那么就去Github上看对应的代码吧!

Finddler 4——一款实用的抓包工具

Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口默认为8888,我们也可以通过设置进行修改。
代理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代理服务器会将数据包进行拦截,代理服务器再冒充客户端发送数据到服务器;同理,服务器将响应数据返回,代理服务器也会将数据拦截,再返回给客户端。
Fiddler可以抓取支持http代理的任意程序的数据包,如果要抓取https会话,要先安装证书。

之前我们爬取的网站,大部分都是通过get方式获取的,但是在日常的上网浏览时,类似于登录、注册等操作,都是通过post方式向服务器发送数据的。使用Chrome的检查虽然也能够帮我们抓取数据包,但是对于Fiddler 4来说,就是“小巫见大巫”了。
我们今天以爬取XX教务系统为目标,通过Fiddler 4来获取我们登录时需要传输的数据,为后续的成绩推送系统做准备!
首先我们需要下载Fiddler 4。安装过程没有什么需要特别注意的,直接一路next即可。
在这里插入图片描述

如上图所示,当我们打开软件时,左边显示了我们浏览的网页地址,右边是网页传输时候的数据。
废话不多说,我们直接分析我们的登录界面:
在这里插入图片描述

可以看到,在最后的字符串中,我们需要提交的数据有:__VIEWSTATETextBox1TextBox2TextBox3RadioButtonList1Button1lbLanguage
经过查询,我们可以知道这些参数的意义为:

  • _VIEWSTATE:.Net框架特有的一个东西
  • extBox1:学号参数
  • TextBox2:密码参数
  • TextBox3:验证码
  • RadioButtonList1:学生标记
  • Button1:空值
  • lbLanguage:空值

仅仅是普通访问,我们就能够直接获取对应的数据,是不是特别简单!没错,Fiddler 4能够大大地简化我们的工作!

总结
  1. 本文首先介绍了目前流行Ajax技术,然后使用Chrome分析Ajax加载的规律,最后使用正则表达式获取到了相应的课程标题;
  2. 正如之前提到的那样,正则表达式是一种强大的语言,当网站没有一定的规律或者是爬取的信息不能够正常的解析出来时,我们只能通过正则表达式来获取我们想要的数据;
  3. Fiddler 4 最大的优点是可以直接连接手机,抓取手机的请求数据——在某些情况下,使用手机爬取信息往往是最简单的。限于篇幅原因,你可以在这篇文章了解如何连接手机;
  4. 接下来我们就要实战成绩通知系统,如果你有时间,可以往前翻翻我们之前学的知识,然后投入到最后的大项目开发中!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Servlet中获取请求参数的值

看看这个大佬做的动图吧&#xff01; 在Servlet中&#xff0c;你可以使用HttpServletRequest对象来获取请求参数的值。HttpServletRequest对象提供了一些方法&#xff0c;允许你访问从客户端发送的请求信息。以下是一些获取请求参数的常用方法&#xff1a; getParameter(String…

node.js项目express的初始化

目录 1.初始化项目2.配置跨域3.开始编写API3.1准备3.2路由处理函数router_make下的user.js3.3路由模块router下的user.js3.4入口文件app.js里面去新增这段代码3.5启动项目进行测试 &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你…

小程序学习-19

Vant Weapp - 轻量、可靠的小程序 UI 组件库 ​​​​​ Vant Weapp - 轻量、可靠的小程序 UI 组件库 安装出现问题&#xff1a;rollbackFailedOptional: verb npm-session 53699a8e64f465b9 解决办法&#xff1a;http://t.csdnimg.cn/rGUbe Vant Weapp - 轻量、可靠的小程序…

Unity中URP下的SimpleLit片元着色器

文章目录 前言一、SimpleLit片元着色器大体框架1、传入 和 返回2、GPU实例化部分3、准备 BlinnPhong 光照模型计算需要的 SurfaceData4、准备 BlinnPhong 光照模型计算需要的 InputData5、进行 BlinnPhong 的计算、雾效颜色混合及透明度计算 二、准备SurfaceData1、SurfaceData…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖微信小程序端(十三)

地址簿相关功能 1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 1.2 代码实现1.2.1 Mapper层1.2.2 Service层1.2.3 Controller层 1.1 需求分析和设计 1.1.1 产品原型 地址簿&#xff0c;指的是消费者用户的地址信息&#xff0c;用户登录成功后可以维护自己的地…

Salesforce开发者 - 从入门到精深

# 前言 1.1 Salesforce 平台简介 Salesforce 是一种云计算平台&#xff0c;专注于客户关系管理&#xff08;CRM&#xff09;。它提供了一整套工具和服务&#xff0c;用于开发、定制和管理企业应用程序。 1.2 为什么选择 Salesforce 开发 - 快速开发&#xff1a;通过Salesfo…

51单片机中断

1、什么是中断&#xff1f; CPU在处理某一事件A时&#xff0c;发生了另一事件B请求CPU迅速去处理&#xff08;中断发生&#xff09;&#xff1b; CPU暂时中断当前的工作&#xff0c;转去处理事件B&#xff08;中断响应和中断服务&#xff09;&#xff1b; 待CPU将事件B处理完…

【书生·浦语】大模型实战营——第六课笔记

视频链接&#xff1a;https://www.bilibili.com/video/BV1Gg4y1U7uc/?vd_source5d94ee72ede352cb2dfc19e4694f7622 教程文档&#xff1a;https://github.com/InternLM/tutorial/blob/main/opencompass/opencompass_tutorial.md 仓库&#xff1a;https://github.com/open-compa…

爬虫-selenium自动化(3)-验证码

#验证码分很多种&#xff0c;奇葩也无处不在:哪个是真茅台&#xff0c;红绿灯&#xff0c;摩托车......(我是个人都看不出来) (๑﹏๑) #本节内容为selenium自动化实现验证码通过-------字符验证码&#xff0c;点触验证码。 验证码介绍 字符验证码案例 点触验证码案例

《Python数据分析技术栈》第03章 03 可视化各级数据(Visualizing various levels of data)

03 可视化各级数据&#xff08;Visualizing various levels of data&#xff09; 《Python数据分析技术栈》第03章 03 可视化各级数据&#xff08;Visualizing various levels of data&#xff09; Whenever you need to analyze data, first understand if the data is stru…

二叉树的直径(LeetCode 543)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路参考文献 1.问题描述 给你一棵二叉树的根节点&#xff0c;返回该树的直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的长度由它们之间边数…

CentOS Linux操作系统源码安装最新Redis版本,使用JSON数据类型踩入新坑

最近有空查阅了redis官网&#xff0c;发现redis数据类型不止Strings、Lists、Sets、Hashes、Sorted sets&#xff0c;还多了几种&#xff0c;决定先试用下JSON数据类型 1、安装Redis软件 JSON数据类型&#xff0c;对Redis版本有要求&#xff0c;需要大于4.0版本。下图是华为云…

开源项目介绍

浙大高飞课题组 微分平坦 微分平坦的思想是&#xff1a;一个全维度的状态空间可以被一组低维的精心挑选的输出平坦空间&#xff08;flat-output space&#xff09;的变量及其导数的代数组合的方式所表示。由此&#xff0c;轨迹规划就可以在这组精心挑选的变量的空间所进行。 …

【C++提高编程(二)】

一、STL初识 1.1、STL的诞生 长久以来&#xff0c;软件界一直希望建立一种可重复利用的东西 C的面向对象和泛型编程思想&#xff0c;目的就是复用性的提升 大多情况下&#xff0c;数据结构和算法都未能有一套标准,导致被迫从事大量重复工作 为了建立数据结构和算法的一套标…

一文详解 Berachain 测试网:全面介绍与教程,bitget wallet教程

什么是Berachain&#xff1f; Berachain&#xff08;web3.bitget.com/zh-CN/assets/berachain-wallet&#xff09;是一种尖端区块链技术&#xff0c;使用 Cosmos SDK 构建的 Layer-1&#xff0c;兼容以太坊虚拟机&#xff08;EVM&#xff09;。它基于一种独特的概念&#xff0c…

【AI】人工智能和图像编码(2)

传统图像编解码与智能图像编解码&#xff0c;都是要编码和解码&#xff0c;但还是有一些区别的。 相关相同点和要点描述如下&#xff1a; 一、区别 1.1 技术原理 传统图像编解码&#xff1a;主要依赖于固定的算法和标准&#xff0c;如JPEG、MPEG等&#xff0c;进行图像的压…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--机器人相关、强化学习

专属领域论文订阅 VX 扫吗关注{晓理紫|小李子}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 分类: 大语言模型LLM视觉模型VLM扩散模型视觉导航具身智能&#xff0c;机器人强化学习开放词汇&#xff0c;检测分割 [晓理紫…

LeetCode、2542. 最大子序列的分数【中等,排序+小顶堆】

文章目录 前言LeetCode、2542. 最大子序列的分数【中等&#xff0c;排序小顶堆】题目及类型思路及代码实现 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领…

2024最新AWVS/Acunetix Premium v24.1.24高级版漏洞扫描器Windows/Linux下载

前言 Acunetix Premium 是一种 Web 应用程序安全解决方案&#xff0c;用于管理多个网站、Web 应用程序和 API 的安全。集成功能允许您自动化 DevOps 和问题管理基础架构。 Acunetix Premium&#xff1a;全面的 Web 应用程序安全解决方案 Web 应用程序对于企业和组织与客户、合作…

算法练习-替换数字(思路+流程图+代码)

难度参考 难度&#xff1a;简单 分类&#xff1a;字符串 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。以下内容均为个人笔记&#xff0c;旨在督促自己认真学习。 题目 给定一个字符串S,它包含小写字母和数字字符&#xff0…