一、网络爬虫是啥?别告诉我你还不知道!
网络爬虫(Web Crawler),又名“网络蜘蛛”、“网络机器人”,听起来是不是有点赛博朋克?简单来说,它就是一种按照预定规则,在互联网上横冲直撞,自动抓取信息的程序或脚本。 就像一只辛勤的蜘蛛,在互联网这张大网上爬来爬去,把有用的信息都给“粘”回来。
它会模拟浏览器的行为,发送HTTP请求去“勾搭”网页服务器,然后把网页内容搞到手,再从中提取我们想要的情报。 搜索引擎、大数据分析、学术研究都离不开它,简直是互联网信息采集界的扛把子!
二、爬虫也分“三六九等”?类型大揭秘!
网络爬虫主要分为两种:一种是“广撒网”的通用网络爬虫,另一种是“精准打击”的定向网络爬虫。
(一)通用网络爬虫:要做就做“全网公敌”!
通用网络爬虫,又叫“全网爬虫”,目标是尽可能多地抓取互联网上的网页信息,就像一个不知疲倦的“信息收集狂魔”。 它的特点如下:
1. 覆盖范围广:上到天文地理,下到明星八卦,只要是网页,它都想爬一遍。
2. 遵守规则:一般会遵循网站的robots.txt协议,不会乱来,是个有素质的爬虫。
3. 并行工作:互联网上的信息浩如烟海,所以它会开很多“分身”,同时爬取,提高效率。
通用网络爬虫的工作流程大致如下:
- 初始URL集合
:就像探险的起点,告诉爬虫从哪里开始。 - URL队列
:存放着待爬取的网页链接,排队等着被“临幸”。 - 页面爬行模块
:负责发送HTTP请求,把网页内容下载下来。 - 页面分析模块
:解析网页,提取其中的链接和内容,为下一步爬取做准备。 - 页面数据库
:存储爬取到的网页,就像爬虫的“记忆库”。 - 链接过滤模块
:避免重复抓取相同的网页,提高效率。
通用网络爬虫通常会采用深度优先或者广度优先的搜索策略,选择哪种方式,取决于你的需求。
(二)定向网络爬虫:做个有追求的“特种兵”!
定向网络爬虫,又叫“聚焦网络爬虫”或“主题网络爬虫”,它可不是什么都抓,而是有选择地抓取与特定主题相关的网页。 它的特点如下:
1. 目标明确:只对特定领域或主题感兴趣,比如网络安全漏洞、最新的勒索病毒等等。
2. 节省资源:不需要像通用爬虫那样“地毯式搜索”,所以消耗的资源也相对较少。
定向网络爬虫的原理和通用爬虫类似,但它多了两个重要的模块:内容评价和链接评价。 简单来说,它会判断网页内容是否符合预定主题,以及链接的质量如何,从而决定是否要抓取。 这就好像一个经验丰富的“情报分析师”,能够快速找到有价值的信息。
三、爬虫界的“葵花宝典”:常见的搜索策略!
网络爬虫在抓取网页时,需要选择合适的搜索策略,才能更高效地找到目标信息。 常见的搜索策略有以下几种:
(一)深度优先搜索(DFS):一条路走到黑!
深度优先搜索就像一个“探险家”,沿着一条路不断深入,直到不能再深入为止。 爬虫会按照深度由低到高的顺序,依次访问下一级网页链接,完成一个分支的爬行后,再回到上一个节点,继续搜索其他链接。 这种策略适合垂直搜索或者站内搜索,但可能会陷入“死胡同”,浪费资源。
(二)广度优先搜索(BFS):雨露均沾,一个都不能少!
广度优先搜索就像一个“老好人”,它会优先抓取同一层次的页面,然后再深入下一层。 这种策略能够有效控制爬行深度,避免陷入无穷深层分支,比较稳妥。
(三)最佳优先搜索(Best-First Search):只抓最靓的仔!
最佳优先搜索是一种基于启发式的搜索策略,它会评估每个节点的重要性,然后决定下一步的抓取顺序。 评估的因素有很多,比如页面与主题的相关性、链接质量等等。 这种方法能够更高效地抓取有价值的信息,尤其适合定向网络爬虫。
四、网络安全工程师的“秘密武器”:开发者工具!
在网络安全行业混,浏览器可不只是用来上网冲浪的,它还是你必备的开发工具!
找到目标网页后,按下F12,或者右键选择“检查”,或者用组合键ctrl+shift+I,都能打开开发者工具,就像打开了潘多拉的魔盒!
开发者工具的界面共有9个标签页,分别是:Elements、Console、Sources、Network、Performance、Memory、Application、Security和Audits。
对于爬虫分析来说,Elements和Network标签是你最需要掌握的,用好了它们,你就能洞察网页的秘密!
Elements标签:网页的“透视眼”!
在Elements标签中,你可以像浏览器一样“看”页面,看到Chrome渲染页面所需要的HTML、CSS和DOM(Document Object Model)对象。 你还可以编辑内容,更改页面的显示效果,简直是“指哪打哪”!
Elements标签分成两个部分:
区域1:显示页面的HTML信息,选中某一行,区域2会显示对应的CSS样式。 区域2:显示当前选中的CSS样式,可以查看和编辑元素的CSS样式。
- computed
:显示当前选中的边距属性和边框属性。 - Event Listeners
:显示整个网页事件触发的JavaScript。
点击Event Listeners下的某个JavaScript,会自动跳转到Sources标签,显示对应的源码,方便你快速定位JavaScript代码的位置,分析JavaScript的行为。
Network标签:网络请求的“监控室”!
在Network标签中,你可以看到页面向服务器请求的信息,请求的大小,以及请求花费的时间,就像一个“网络流量监控器”。
Network标签主要包含五个区域:
1.功能区:
- 记录开关
:红色圆点表示开启网络日志记录,灰色表示未开启。 - 清除日志
:清除当前所有网络请求记录。 - 屏幕捕获
:开启后会记录页面在不同时间下的快照。 - 过滤器开关
:开启后可显示筛选区。 - 快速查找
:用于快速查找特定请求。 - 显示设置
:包括是否使用更大的区域显示请求记录、是否显示Overview等。 - 分组显示
:勾选后可按表单名称对网络请求进行分组。 - 保留日志
:勾选后,页面刷新不会清空之前的请求记录。 - 禁用缓存
:当打开开发者工具时生效,页面资源不会存入缓存。 - 离线模式
:用于测试离线状态下的页面表现。 - 网络限速
:模拟不同网络条件,如弱网。
2.筛选区:
提供多种预定义的筛选选项,如ALL(显示所有请求)、XHR(AJAX异步请求)、JS(JavaScript文件)、CSS(样式表文件)、Img(图片)、Media(媒体文件)、Font(字体文件)、Doc(HTML文档)、WS(WebSocket请求)等。 还可以输入自定义条件进行筛选。
3.时间轴区(Overview):
以时间轴的形式展示页面加载过程,包括DOMContentLoaded和load事件的触发时间。 可以通过滑动鼠标滚轮查看不同时间点的加载情况。
4.主显示区:
显示所有网络请求的详细列表,包括以下列:
- Name
:请求资源的名称。 - Status
:HTTP状态码。 - Type
:请求资源的MIME类型。 - Initiator
:发起请求的对象或进程。 - Size
:服务器返回的响应大小。 - Time
:请求的总持续时间。 - Waterfall
:各请求相关活动的直观分析图。 点击某个请求的名称,可以查看该请求的详细信息,包括Headers(请求头和响应头)、Preview(预览)、Response(响应内容)、Cookies(Cookie信息)、Timing(请求生命周期各阶段时间)等。
5.信息汇总区:
显示当前页面加载的总请求数、数据传输量、加载时间等信息。 包括DOMContentLoaded和load事件的触发时间及其在时间轴上的标记。
Requests Table:
Requests Table是Network标签的核心部分,它记录了每个请求的详细信息。 但是,每次网站刷新时,请求列表都会清空并记录最新的请求信息。
例如,用户登录后发生304跳转,就会清空跳转之前的请求信息并捕捉跳转后的请求信息。 对于每条请求信息,可以单击查看该请求的详细信息:
关于Headers的内容如下:
Headers 标签通常分为以下几个部分:
请求方法和URL
Request Method:显示请求的HTTP方法(如GET、POST、PUT、DELETE等)。 Request URL:显示请求的完整URL。 Request HTTP Version:显示使用的HTTP版本(如HTTP/1.1、HTTP/2等)。
请求头(Request Headers)
请求头是由客户端发送给服务器的头信息,它包含了关于请求的元数据。常见的请求头包括:
Accept:客户端可接受的响应内容类型(如`text/html`、`application/json`等)。 Accept-Encoding:客户端可接受的内容编码方式(如`gzip`、`deflate`等)。 Accept-Language:客户端偏好的语言(如`zh-CN`)。 Authorization:用于身份验证的凭据(如Basic Auth、Bearer Token等)。 Content-Length:请求体的长度(仅在POST或PUT请求中出现)。 Content-Type:请求体的内容类型(如`application/json`、`application/x-www-form-urlencoded`等)。 Cookie:客户端存储的Cookie信息。 Host:请求的主机名。 Origin:发起请求的源(用于CORS跨域请求)。 Referer:请求的来源页面。 User-Agent:客户端的浏览器或设备信息。
响应头(Response Headers)
响应头是由服务器返回给客户端的头信息,它包含了关于响应的元数据。常见的响应头包括:
Access-Control-Allow-Origin:允许访问资源的源(用于CORS跨域请求)。 Cache-Control:缓存策略(如`no-cache`、`max-age`等)。 Content-Encoding:响应体的内容编码方式(如`gzip`)。 Content-Length:响应体的长度。 Content-Type:响应体的内容类型(如`text/html`、`application/json`等)。 Date:服务器生成响应的时间。 ETag:资源的唯一标识符,用于缓存验证。 Expires:响应过期时间。 Last-Modified:资源最后修改时间。 Location:重定向目标URL。 Set-Cookie:服务器设置的Cookie信息。 Server:服务器软件信息。
请求体(Request Payload)
对于POST或PUT请求,Headers 标签还会显示请求体的内容。这通常用于查看发送到服务器的数据,例如表单数据、JSON对象等。查询参数(Query String Parameters)
如果请求URL中包含查询参数(如`?key=value`),Headers 标签会将这些参数列出,方便开发者查看。
Headers 标签的作用:
- 调试请求和响应
:通过查看Headers,可以确认请求是否正确发送,以及服务器是否返回了预期的响应。 - 优化性能
:通过分析缓存头(如`Cache-Control`、`ETag`等),可以优化页面的缓存策略,减少重复请求。 - 排查跨域问题
:通过查看`Access-Control-Allow-Origin`等头信息,可以排查CORS跨域问题。 - 验证身份认证
:通过检查`Authorization`头,可以确认身份认证信息是否正确传递。 - 分析内容编码
:通过查看`Content-Encoding`和`Content-Type`,可以确认资源是否被正确压缩和解析。
示例:
假设你发起一个GET请求,Headers标签可能显示如下内容:
请求方法和URL
GET /api/data HTTP/1.1
请求头
Host: example.com Connection: keep-alive Accept: application/json User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Cookie: sessionid=1234567890
响应头
HTTP/1.1 200 OK Content-Type: application/json Content-Length: 256 Cache-Control: max-age=3600 Date: Sat, 15 Oct 2023 12:34:56 GMT Set-Cookie: sessionid=9876543210; Path=/; HttpOnly
请求体(如果适用)
如果是一个POST请求,可能会显示:
Request Payload: { "username": "user", "password": "pass" }
五、网站分析三步走,轻松搞定!
分析网站的步骤如下:
- 步骤01
:找出数据来源,大部分数据来源于Doc、XHR和JS标签。 - 步骤02
:找到数据所在的请求,分析其请求链接、请求方式和请求参数。 - 步骤03
:查找并确定请求参数来源。有时候某些请求参数是通过另外的请求生成的,比如请求A的参数id是通过请求B所生成的,那么要获取请求A的数据,就要先获取请求B的数据作为A的请求参数。
黑客/
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...