Web 代理、爬行器和爬虫

(一)Web 在线网页代理服务器的使用方法
1. 什么是 Web 在线网页代理服务器

Web 在线网页代理服务器就像是网络穿越仪一般,它是一种具有转发功能的应用程序,能够帮助用户在特定网络环境下访问被封锁的网页。用户在某些网络环境中可能无法直接访问特定的网页资源,而通过 Web 在线网页代理服务器,用户的请求可以被转发到目标网站,然后将目标网站的响应返回给用户,从而实现对被封锁网页的访问。

2. 使用流程详解

使用 Web 在线网页代理服务器的具体步骤如下:

首先,寻找可靠的代理服务器网站或服务提供商。用户可以通过网络搜索等方式找到一些信誉良好的代理服务器站点,比如一些知名的在线代理服务平台。

接着,打开代理网站,在网站的主页上通常会有一个输入框,提示用户输入要访问的网址。

然后,在输入框中输入要访问的被封锁的网址,并点击网站上的 "GO" 按钮或类似的开始按钮来提交请求。

此时,代理网站会接收到用户的请求,并将请求内容封装到 HTTP 包中。随后,代理网站会建立与目标网站的 TCP 连接,并发送封装好的 HTTP 包。

目标网站收到代理网站发送的请求后,解包并处理请求内容。处理完成后,目标网站将请求的资源封装到 HTTP 包中,然后发送回代理网站。

代理网站收到目标网站返回的 HTTP 包,解包并提取出资源。接着,代理网站将请求的资源封装到 HTTP 包中,并将该 HTTP 包发送回给用户的用户代理(如浏览器)。

最后,用户的用户代理收到代理网站返回的 HTTP 包后,解包并显示出请求的网页或资源。

3. 注意事项

使用 Web 在线网页代理服务器时,用户需要注意保护个人信息和隐私。虽然代理服务器可以帮助用户访问被封锁的网页,但它并不能保证网络安全。在使用代理服务器的过程中,用户的请求和响应都要经过代理服务器,这就增加了信息被泄露的风险。因此,用户在使用代理服务器时,应避免在通过代理访问的网页上输入敏感信息,如个人身份证号、银行卡密码等。

(二)Web 请求和响应中的代理方式
1. Web 开发中的请求方法

在 Web 开发中,主要的请求方法有 GET 请求、POST 请求和 HEAD 请求。

GET 请求用于从服务器请求数据,不改变服务器的状态。通常用于获取静态资源、HTML 文件或读取数据,比如从 API 获取列表或单条数据。其特点是请求参数通过 URL 传递,对传递的数据有长度限制,并且是幂等的,无论请求多少次,服务器的状态不会发生变化。同时,GET 请求不应用于提交敏感信息,因为参数信息会显示在地址栏的 URL 中,不安全。

POST 请求用于向服务器发送数据,通常用于提交表单、上传文件、或创建新的资源。发送的数据通常会影响服务器的状态,比如在数据库中创建记录。POST 请求的特点是请求体中包含数据,传递的内容没有长度限制。它不是幂等的,每次请求都会对服务器的状态产生影响。通常用于提交敏感信息,因为数据不会暴露在 URL 中。

HEAD 请求与 GET 请求类似,但是它只返回 HTTP 头部信息,不返回实际的内容主体。HEAD 请求通常用于检查资源是否存在、获取资源的元数据等。

2. 借助代理进行文件下载的示例

以文件下载为例,展示如何使用 NSURLRequest、NSURLConnection 等对象通过代理方式处理服务器响应。首先,需要设置代理服务器的地址和端口信息。然后,创建一个 NSURLRequest 对象,并将其配置为使用代理服务器。接着,使用 NSURLConnection 发送请求,并在连接的委托方法中处理服务器的响应。

以下是一个简单的代码示例:

复制代码
// 设置代理服务器地址和端口

let proxyHost = "proxy.example.com"

let proxyPort = 8080

// 创建 URL

let url = URL(string: "http://download.example.com/file.zip")!

// 创建请求对象

var request = URLRequest(url: url)

// 设置代理

let proxyURL = URL(string: "http://(proxyHost):(proxyPort)")

let configuration = URLSessionConfiguration.default

configuration.connectionProxyDictionary = [kCFProxyHostNameKey as String: proxyHost, kCFProxyPortNumberKey as String: proxyPort]

let session = URLSession(configuration: configuration)

// 发送请求并处理响应

let task = session.dataTask(with: request) { (data, response, error) in

if let error = error {

print("Error: (error.localizedDescription)")

} else if let data = data {

// 处理下载的文件数据

// 将数据保存到本地文件等操作

}

}

task.resume()

在使用代理进行文件下载时,需要注意以下几点:

首先,确保代理服务器的稳定性和可靠性。如果代理服务器不稳定,可能会导致下载中断或速度缓慢。

其次,注意代理服务器的安全性。一些不可信的代理服务器可能会窃取用户的下载内容或个人信息。

最后,根据实际情况选择合适的代理方式。不同的代理服务器可能支持不同的协议和功能,需要根据具体的需求进行选择。

(三)web 服务器请求代理方式
1. 代理、网关和隧道的概念

代理、网关和隧道在通信中都起着重要的作用,但它们的功能和作用有所不同。

代理作为中间人转发请求和响应。代理服务器位于客户端和服务器之间,接收客户端的请求并转发给服务器,同时接收服务器的响应并返回给客户端。代理服务器可以用于缓存资源、过滤请求、隐藏客户端的真实 IP 地址等。

网关将 HTTP 请求转化为其他协议通信并提高安全性。网关可以将 HTTP 请求转换为其他协议,如 FTP、SMTP 等,以便与不同类型的服务器进行通信。网关还可以提供安全功能,如身份验证、加密等。

隧道用于中转客户端和服务器的通信并确保安全。隧道建立起一条与服务器的通信线路,使用 SSL 加密技术进行通信,确保客户端和服务器端安全通信。隧道通常用于在不安全的网络环境中建立安全的通信通道。

2. 参考文献说明

参考书籍《图解 HTTP》对理解相关内容有很大的帮助。这本书对互联网基盘 ------HTTP 协议进行了全面系统的介绍,包括代理、网关和隧道的概念和作用。通过阅读这本书,读者可以更深入地了解 Web 通信中的各种技术和概念,提高对 Web 开发和网络通信的理解。

二、爬虫的工作原理及案例

(一)网络爬虫概述
1. 定义和作用

网络爬虫是自动抓取互联网信息的程序或脚本。它们被广泛用于搜索引擎、数据挖掘等领域,能够从公开网页抓取数据,为不同领域如金融分析、市场趋势预测等提供数据支持。在一定程度上代替了手工访问网页,实现自动化采集互联网的数据,从而更高效地利用互联网中的有效信息。

2. 历史沿革

网络爬虫技术起源于 1990 年代初的搜索引擎。1990 年,Archie 搜索引擎的出现标志着网络爬虫研究的开始。1993 年麻省理工学院的马修格雷开发了名为 World wide Web Wanderer 的爬虫系统,该系统能够统计互联网中服务器的数量,为后续爬虫系统的开发提供了重要设计思想。

到了 1994 年,出现了机器人、蜘蛛、爬虫等网络自动跟踪索引程序。同年,美国华盛顿大学的师生开发了一种在网络上查询信息的工具,被认为是现代网络爬虫的雏形。它是首个能对 Web 页面进行全文搜索的搜索引擎,使用了广度优先的策略来遍历网页。同年,斯坦福大学的杨致远和大卫费罗共同创办了 Yahoo 公司,其搜索引擎后来成为极具影响力的分类目录式搜索引擎。随后,Lycos、Infoseek、Metacrawler 和 HotBot 等搜索引擎相继推出。

1995 年春,美国数字设备公司的三位科学家开发了 Altavista 搜索引擎,于同年 12 月开始提供信息检索服务,这是首次采用爬虫技术进行网页索引的实例之一。

1997 年,分布式网络爬虫技术的出现进一步推动了搜索引擎技术的发展。同年年底,斯坦福大学的拉里佩奇、谢尔盖布林、斯科特哈桑和阿伦斯特博格共同开发了 Google 搜索引擎,开启了以搜索引擎为主导的互联网新时代。1998 年由谢尔盖布林和拉里佩奇共同开发的 PageRank 算法大大改进了搜索引擎的效果,后来成为了谷歌爬虫的著名算法。

2002 年,开源的网络搜索引擎 Apache Nutch 发布,通过开放源代码的方式推动了网络爬虫技术的发展,促进了学术界和工业界对网络爬虫的研究和应用。

随着技术的发展,网络爬虫经历了从单一处理方式到分布式并行处理的显著演变。起初,爬虫技术仅限于捕获静态网页信息,但后来发展到能够处理动态和实时加载的页面内容。数据爬取的范围和精确性也得到了提升,从一般性的爬取转向更加专注和精准的目标数据爬取。

(二)爬虫工作原理
1. 基本步骤

(1)确定爬取目标:明确需要抓取的网页或数据范围。

(2)发送请求:向目标网页发送 HTTP 请求,获取网页内容。

(3)获取响应:接收服务器返回的响应,包括网页的 HTML 代码等。

(4)解析数据:使用特定的解析工具或库,从网页源代码中提取所需的数据。

(5)存储数据:将提取到的数据保存到本地文件或数据库中,以便后续分析和使用。

2. 实现方式

爬虫可以用多种编程语言实现,其中 Python 是常用的编程语言之一。Python 爬虫常用的库有 requests、BeautifulSoup、Scrapy、Selenium 和 PyQuery 等。

requests 是基于 urllib 编写的阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。

BeautifulSoup 是 HTML 和 XML 的解析库,从网页中提取信息,同时拥有强大的 API 和多样解析方式。

Scrapy 是一个强大的爬虫框架,可以满足简单的页面爬取,也可以用于复杂的爬虫项目。

Selenium 是自动化测试工具,可以模拟用户操作浏览器,适用于处理 JavaScript 渲染的页面。

PyQuery 是 jQuery 的 Python 实现,能够以 jQuery 的语法来操作解析 HTML 文档,易用性和解析速度都很好。

3. 注意事项

(1)合法合规爬取:在爬取数据时,要遵守法律法规和网站的使用条款。不得爬取受版权保护的内容或未经授权的数据。

(2)应对反爬机制:许多网站会采取反爬措施,如验证码、IP 封锁等。爬虫开发者需要不断更新技术,以绕过这些障碍。

(3)注意数据抓取方式:避免对目标网站造成过大的负担,不要在短时间内发送大量请求,以免影响网站的正常运行。

(三)Python 爬虫示例
1. 示例功能介绍

以从豆瓣电影中抓取电影名称和评分为例,该示例的功能是获取豆瓣电影的部分信息,包括电影名称、导演、时间和评分等。通过这个示例,可以了解 Python 爬虫的基本实现过程和方法。

2. 代码解读

以下是从豆瓣电影中抓取电影名称和评分的 Python 代码解读:

复制代码
import requests

import xlwt

from bs4 import BeautifulSoup

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',

'Host': 'movie.douban.com'

}

movie_list = []

director_list = []

time_list = []

star_list = []

for i in range(0, 10):

link = 'https://movie.douban.com/top250?start=' + str(i * 25)

res = requests.get(link, headers=headers, timeout=10)

soup = BeautifulSoup(res.text, "lxml")

div_list = soup.find_all('div', class_='hd')

div1_list = soup.find_all('div', class_='bd')

div2_list = soup.find_all('div', class_='star')

for each in div_list:

movie = each.a.span.text.strip()

movie_list.append(movie)

for each in div1_list:

info = each.p.text.strip()

if len(info) < 3:

continue

time_start = info.find('20')

if time_start < 0:

time_start = info.find('19')

end = info.find('...')

time = info[end + 32:end + 36]

time_list.append(time)

end = info.find('主')

director = info[4:end - 3]

director_list.append(director)

for each in div2_list:

info = each.text.strip()

star = info[0:3]

star_list.append(star)

file = xlwt.Workbook()

table = file.add_sheet('sheet name')

table.write(0, 0, "排名")

table.write(0, 1, "电影")

table.write(0, 2, "时间")

table.write(0, 3, "导演")

table.write(0, 4, "评分")

for i in range(len(star_list)):

table.write(i + 1, 0, i + 1)

table.write(i + 1, 1, movie_list[i])

table.write(i + 1, 2, time_list[i])

table.write(i + 1, 3, director_list[i])

table.write(i + 1, 4, star_list[i])

file.save('data.xls')

首先,设置请求头headers,包含user-agent和Host信息,模拟浏览器访问。然后,通过循环遍历豆瓣电影 top250 的页面,每次获取 25 部电影的信息。

使用requests.get()方法发送 HTTP 请求,获取网页内容。通过BeautifulSoup解析网页,分别找到电影名称、时间、导演和评分所在的元素。

对于电影名称,从div元素的class="hd"中提取a标签下span标签的文本内容,并去除空格。

对于时间和导演,从div元素的class="bd"中提取p标签的文本内容,通过字符串处理找到时间和导演信息。

对于评分,从div元素的class="star"中提取文本内容的前三个字符作为评分。

最后,将数据保存到 Excel 表格中,使用xlwt库的table.write()方法填写表格内容,并保存文件。

三、Web 爬行器的作用及案例

(一)使用 Python 的 Web 爬行器
1. 功能介绍

Python 开发 Web 爬行器具有诸多优势。首先,Python 语言简洁易读,使得代码易于理解和维护。其次,它拥有强大的库和框架,如 BeautifulSoup、Scrapy 等,为开发人员提供了丰富的工具和功能。Web 爬行器能够自动抓取和提取信息,实现自动化数据采集和处理,大大提高了工作效率。

2. 分类和优势

Web 爬行器主要分为通用爬行器、垂直爬行器和增量爬行器。通用爬行器可以爬取任意网站的数据,具有广泛的适用性。垂直爬行器专注于特定领域或特定类型的网站,如新闻网站、电商网站等,能够更深入地挖掘特定领域的信息。增量爬行器只爬取更新的数据,避免重复爬取已有的数据,节省时间和资源。

Web 爬行器的优势主要体现在以下几个方面:一是自动化数据采集,能够自动访问网页、提取数据,大大提高了数据采集的效率;二是数据多样性,可以采集各种类型的数据,如文本、图片、视频等;三是数据实时性,可以定期或实时地爬取数据,保持数据的最新性;四是可用于数据分析和挖掘,通过爬取大量数据,可以发现隐藏的规律和趋势。

3. 腾讯云相关产品

腾讯云提供了一系列与 Web 爬行器相关的产品。云服务器(CVM)提供弹性计算能力,支持多种操作系统和应用场景,为 Web 爬行器的运行提供稳定的计算资源。云数据库 MySQL 版(CDB)提供高可用、可扩展的 MySQL 数据库服务,可用于存储爬取的数据。云存储(COS)提供安全、稳定、低成本的对象存储服务,适用于图片、视频、文档等数据的存储和管理。人工智能平台(AI Lab)提供丰富的人工智能算法和模型,可对爬取的数据进行分析和处理。物联网(IoT Hub)提供稳定、安全的物联网连接和管理服务,可与 Web 爬行器结合,实现物联网数据的采集和处理。区块链服务(BCS)提供高性能、安全可信的区块链服务,可用于保障爬取数据的真实性和安全性。视频直播(Live)提供高清、低延迟的视频直播服务,与 Web 爬行器结合可实现直播数据的采集和分析。产品介绍链接可参考:云服务器产品介绍链接云数据库 MySQL 版产品介绍链接云存储产品介绍链接人工智能平台产品介绍链接物联网产品介绍链接区块链服务产品介绍链接视频直播产品介绍链接

(二)大数据分享中的 Web 爬行器
1. 开源 Web 抓取工具的作用

开源 Web 抓取工具在大数据繁荣中发挥着重要作用。它们允许用户根据源代码或框架进行编码,为快速、简单但广泛的抓取方式提供了大量支持。用户可以轻松抓取所需的数据,进行数据分析和处理。2019 年十大开源 Web 抓取工具包括 Scrapy、Heritrix、Web-Harvest、MechanicalSoup、Apify SDK、Apache Nutch、Jaunt、Node-crawler、PySpider 和 StormCrawler。

Scrapy 是 Python 中最流行的开源和协作式 Web 抓取工具,建立在扭曲的异步网络框架之上,能高效提取数据并以多种格式存储。其优势包括快速而强大、易于使用、详细文档丰富、可插入新功能、社区健康资源丰富以及可在云环境下运行。

Heritrix 是基于 JAVA 的开源扩展程序,高度可扩展,设计用于 Web 归档,尊重 robot.txt 排除指令和 Meta 机器人标签,提供基于 Web 的用户界面。其优势有可更换的可插拔模块、基于 Web 的界面、尊重规则和出色的可扩展性。

Web-Harvest 是用 Java 编写的开源刮板,利用 XSLT、XQuery 和正则表达式等技术从指定页面收集数据,可通过自定义 Java 库增强提取功能。其优势为强大的文本和 XML 操作处理器、变量上下文支持以及支持真实脚本语言。

MechanicalSoup 是 Python 库,模拟人在使用浏览器时与网站的交互,围绕 Requests 和 BeautifulSoup 构建,自动存储和发送 cookie,跟随重定向和链接并提交表单。其优势是模拟人类行为、快速抓取简单网站、支持 CSS 和 XPath 选择器。

Apify SDK 是内置 JavaScript 的最佳 Web 抓取工具之一,可扩展的抓取库可使用无头 Chrome 和 Puppeteer 开发数据提取和 Web 自动化作业,具有大规模、高性能刮擦、通过代理池验证云避免被检测以及对 Node.js 插件内置支持等优势。

Apache Nutch 是完全用 Java 编写的开源刮板,具有高度模块化的体系结构,允许开发插件,优势包括高度可扩展和可扩展、遵守 txt 规则、充满活力的社区和积极的发展以及可插拔的解析、协议、存储和索引。

Jaunt 是基于 JAVA 的网络抓取工具,专为网络抓取、网络自动化和 JSON 查询而设计,提供快速、超轻巧、无头的浏览器,优势有处理单个 HTTP 请求 / 响应、轻松与 REST API 接口、支持 HTTP/HTTPS 和基本身份验证以及 DOM 和 JSON 中启用 RegEx 的查询。

Node-crawler 是基于 Node.js 的功能强大的 Web 搜寻器,原生支持非阻塞异步 I/O,支持 DOM 的快速选择,提高搜寻器开发效率。其优势包括速率控制、URL 请求不同优先级、可配置的池大小和重试以及服务器端 DOM 和自动 Cheerio 或 JSDOM 的 jQuery 插入。

PySpider 是 Python 中功能强大的网络爬虫系统,具有易于使用的 Web UI 和分布式体系结构,支持多种数据库进行数据存储。其优势为强大的 WebUI、多种消息队列支持以及分布式架构。

StormCrawler 是成熟的开源 Web 搜寻器,由可重复使用的资源和组件组成,主要用 Java 编写,用于构建低延迟、可扩展和优化的 Web 抓取解决方案。其优势有高度可扩展、易于扩展的附加库以及出色的线程管理。

2. 非编码工具的优势

非编码工具如 Octoparse 使抓取不再是开发人员的特权。对于不熟悉编程的用户来说,这些工具更适合,让抓取变得容易。它们无需用户具备编程知识,通过图形界面和简单的操作即可实现数据抓取。

(三)Web 爬行器在安全测试中的应用
1. 使用 DirBuster 寻找敏感文件和目录

DirBuster 是一款安全工具,可通过暴力或者表单进行来发现 Web 应用服务器上的目录名和文件名。具体实验步骤如下:首先,创建一个包含要查找的文件列表的文本文件,如 dir_dictionary.txt。然后,在 DirBuster 窗口中,将目标 URL 设置为靶机地址,如 http://192.168.123.12/。接着,设置线程数为 20 以获得不错的测试速度。选择基于列表的暴力破解,点击 "浏览",选择创建的文件。取消选中 "Be Recursive" 选项,其余选项保留默认值。最后,点击 "Start" 开始扫描。如果转到结果选项卡,我们将看到 DirBuster 在字典中找到的文件夹,响应码 200 表示文件或目录存在并且可以被读取。

2. 使用 ZAP 寻找敏感文件和目录

OWASP Zed Attack Proxy(ZAP)是一种非常通用的 web 安全测试工具,具有代理、被动和主动漏洞扫描器、爬行器等特性。配置 ZAP 作为浏览器代理的步骤如下:从 Kali Linux 菜单启动 OWASP ZAP,选择 Applications |03 - Web Application Analysis owasp-zap 或者打开终端并输入 owasp-zap 命令。更改 ZAP 的代理设置,默认端口为 8080,为避免与其他代理冲突,可将端口更改为 8088。在 Firefox 中,转到主菜单并导航到 Preferences | Advanced / Network;在 Connection 中,单击 Settings,选择手动代理配置,并将 HTTP 代理设置为 127.0.0.1,将端口设置为 8088,选中该选项以对所有协议使用相同的代理,然后单击 OK。

使用 ZAP 扫描服务器存在的文件夹的方法:正确配置代理后,浏览到目标网站,如 http://192.168.123.130/WackoPicko/。我们将看到 ZAP 通过显示我们刚访问过的主机的树结构来对此操作做出反应。现在在 ZAP 的左上角面板("站点" 选项卡)中在目标网站内右键单击,然后在上下文菜单中,导航到 Attack(攻击)强制浏览目录(和子目录),WackoPicko 文件夹。

相关推荐
前端大卫25 分钟前
Vue3 + Element-Plus 自定义虚拟表格滚动实现方案【附源码】
前端
却尘41 分钟前
Next.js 请求最佳实践 - vercel 2026一月发布指南
前端·react.js·next.js
ccnocare42 分钟前
浅浅看一下设计模式
前端
Lee川1 小时前
🎬 从标签到屏幕:揭秘现代网页构建与适配之道
前端·面试
Ticnix1 小时前
ECharts初始化、销毁、resize 适配组件封装(含完整封装代码)
前端·echarts
纯爱掌门人1 小时前
终焉轮回里,藏着 AI 与人类的答案
前端·人工智能·aigc
twl1 小时前
OpenClaw 深度技术解析
前端
崔庆才丨静觅1 小时前
比官方便宜一半以上!Grok API 申请及使用
前端
星光不问赶路人2 小时前
vue3使用jsx语法详解
前端·vue.js
天蓝色的鱼鱼2 小时前
shadcn/ui,给你一个真正可控的UI组件库
前端