什么是网页抓取:终极新手指南
通过此全面概述了解网络抓取的基础知识。
网页抓取是一种非常强大的工具,可用于大规模收集数据并从中提取有价值的见解,无论是个人用途还是商业用途。本指南将全面概述网页抓取是什么、其工作原理以及您可以使用它做什么。让我们开始吧!
什么是网页抓取 – 定义
网络抓取是指从网络上收集数据的过程。它通常使用自动化工具(网络抓取软件或定制脚本)来执行。
网络抓取有多种名称。它也可以称为网络收集、网络数据提取、屏幕抓取或数据挖掘。这些术语之间存在一些细微的差别,但它们或多或少可以互换使用。
为什么要从网络上抓取数据?
你可能会想——抓取网页数据有什么意义?其实,抓取网页数据可以创造很多价值。
首先,你可以使用数据抓取来 大大加快任务速度。假设您想从亚马逊和谷歌等多个网站收集评论以了解产品。使用网页抓取,只需几分钟;手动抓取,则需要花费数小时甚至数天。
网页抓取还有助于 自动化重复工作。在 Covid-19 封锁期间,网上订餐通常非常困难,因为所有送货时段都被占满了。您无需手动刷新网页,而是可以构建一个网页抓取工具来帮您完成刷新,然后在有空位时通知您。
网络抓取也有强大的商业用途。一些公司用它来 研究市场 通过抓取竞争对手的产品和定价信息。其他 汇总来自多个来源的数据 例如,航空公司提供优惠信息。还有一些公司会从 YellowPages 和 Crunchbase 等各种公共资源中获取 寻找业务线索.
解释了网络抓取在商业中最常见的用途。
网页搜集如何工作
网页抓取涉及连续完成的多个步骤:
1. 确定您的目标网页。 例如,您可能想要抓取电子商务商店中某个类别的所有产品。您可以手动执行此操作,也可以构建一个称为 网络爬虫 查找相关的 URL。
2. 下载其 HTML 代码。 每个网页都是用 HTML 构建的;你可以在网页浏览器中按下鼠标右键并选择 检查。
3. 提取您想要的数据点。 HTML 很乱,包含不必要的信息,所以你需要清理它。这个过程称为 数据解析。最终结果是 .json、.csv 文件或其他可读格式的结构化数据。
4. 根据需要调整你的网络爬虫。 网站往往会经常变化,您可能会找到更有效的方式来做事。
有许多工具可以简化数据抓取过程或减轻您的部分工作量。现成的网络抓取工具让您无需自行构建; 代理 可以帮助您绕过阻止;如果您愿意,您可以获得抓取服务来为您完成整个工作。
网页抓取合法吗?
网络抓取并不是一件很受欢迎或有时不道德的事情。抓取者经常忽略网站的指导方针(ToS 和 robots.txt),因请求过多而导致服务器瘫痪,甚至盗用他们抓取的数据来推出竞争服务。难怪许多网站热衷于屏蔽任何可见的爬虫或抓取工具(当然,搜索引擎除外)。
尽管如此,网页抓取本身是合法的,但有一些限制。多年来,已经出现了许多具有里程碑意义的案例。我们不是律师,但已经确定,只要信息是公开的,并且不涉及版权或个人信息,网页抓取是可以的。
由于网络抓取的问题并不总是简单明了——每个用例都需要单独考虑——因此寻求法律建议是明智的。
Web 抓取与 API
网页抓取并不是从网站获取数据的唯一方法。事实上,它甚至不是默认方法。首选方法是使用 API。
API(应用程序编程接口)提供了一种以编程方式与特定网站或应用程序交互的方法。reddit.com 等网站拥有允许任何人下载其内容的 API。
然而,API 也存在问题。首先,并非所有网站都提供 API。其次,API 提供的数据往往过时。第三,您经常需要处理可以收集的数据和收集频率的限制。最后,出于某种原因,API 的更改或中断频率甚至比网页抓取脚本还要高。
因此,网页抓取和 API 之间的主要区别在于,前者可以更好地访问数据:您可以在浏览器中看到的任何内容都可以获取。但是,网页抓取通常在网站不知情的情况下发生。当他们发现时,他们会对此感到非常不高兴。
选择最适合该工作的网页抓取工具
市场上不乏网页抓取工具。如果您愿意,甚至可以使用 Microsoft Excel 进行抓取。但是,您应该这样做吗?可能不会。网页抓取工具可分为三类:1) 定制工具、2) 现成工具和 3) 网页抓取 API。
抓取数据的一种方法是 自己构建一个抓取工具. 各种相关的库和框架 编程语言,但使用 Python 和 Node.js 进行网页抓取是最流行的方法。原因如下:
- Python 非常容易阅读,你不需要编译代码。它有很多出色的表现 网页抓取库 以及其他适合您能想到的任何网页抓取项目的工具。Python 可供初学者和高级用户使用,并拥有强大的社区支持。
- Node.js 被写成 JavaScript。默认情况下它是异步的,因此它可以处理并发请求。这意味着它在需要抓取多个页面的情况下效果最佳。Node.js 部署简单,并且具有 性能卓越的工具 用于动态抓取。
如果你已经熟悉了,比如说, PHP,您也可以使用这些技能进行网页抓取。
对于那些没有编程技能或时间的人来说,你可以选择 现成的网页抓取工具. 无代码网页爬虫 为你配置了一切,并包装在一个漂亮的用户界面中。它们让你无需任何或最少的编程知识即可进行抓取。你也可以尝试使用 预先收集的数据集 – 经过组织(通常排列在表格中)并准备进行进一步分析的记录集合。
前两类之间的中间立场是 网页抓取 API。与视觉抓取工具相比,它们的学习难度更高,但可扩展性更强。本质上,这些 API 处理代理和 Web 抓取逻辑,因此您可以通过对提供商的基础设施进行简单的 API 调用来提取数据。
对于那些寻求额外支持的人来说, ChatGPT 使其成为网页抓取的有用工具。虽然并不完美,但它可以编写简单的代码并解释其背后的逻辑。对于初学者或希望提高技能的经验丰富的抓取者来说,它都非常有用。
网上有很多抓取工具。找到适合您的工具。
网页抓取挑战
网页抓取并不容易;有些网站会尽最大努力确保你不会有任何喘息的机会。以下是你可能会遇到的一些障碍
现代网站 使用请求限制 以避免服务器过载和不必要的连接中断。该网站控制您在特定时间窗口内发送请求的频率。当您达到限制时,您的网络抓取工具将无法执行任何进一步的操作。如果您忽略它,您可能会阻止您的 IP 地址。
另一个可能严重阻碍你的网页抓取工作的挑战是 验证码。 这是一种用于对抗机器人的技术。它们可能因为您在短时间内发出过多请求、2) 使用低质量代理或 3) 没有正确覆盖您的网络抓取工具的指纹而被触发。一些 CAPTCHA 被硬编码到 HTML 标记中,并出现在某些点(例如注册)。在您通过测试之前,您的抓取工具将无法工作。
网站惩罚你抓取数据最残酷的方式是 通过阻止您的 IP 地址。 然而,IP 封禁存在一个问题——网站所有者可以封禁整个 IP 范围(256),因此所有共享同一 IP 的人 子网 将会失去访问权限。这就是网站不愿意使用这种方法的原因。
了解如何处理六种常见的网络抓取障碍。
网页抓取最佳实践
以下是一些网络抓取最佳实践,可帮助您的项目取得成功。
首先, 尊重您正在抓取的网站。 您应该阅读数据隐私条例并遵守网站的服务条款。此外,大多数网站都有一个 robots.txt 文件 - 该文件指示爬虫可以访问哪些内容以及应避免哪些内容。
网站可以跟踪你的行为。如果你发送了太多请求,你的行为就会被标记。所以, 你应该表现得自然 通过保持连接请求之间的随机间隔并降低抓取率。如果您不想给网站和网络抓取工具带来负担,请不要在高峰时段收集数据。
另一个关键步骤是 注意你的数字身份。 网站使用 CAPTCHA、IP 拦截和请求限制等反抓取技术。为了避免这些和其他障碍,请轮换您的代理和用户代理。前者涵盖位置隐藏,后者涵盖浏览器欺骗。因此,每次连接时,您都会有一个“新”身份。
我们准备了一些在收集数据时会很有用的技巧和窍门。
开始编写你的第一个 Python 脚本
3. 要构建你的网页爬虫, 您还需要一个代码编辑器。 您可以选择任何您喜欢的编辑器,Notepad++、Visual Studio Code,或者使用计算机上预装的编辑器。
一旦满足了所有先决条件,您就可以编写第一个 Python 脚本——向网站发送 HTTP 请求、解析 HTML 响应并保存数据。
本指南为 Python 网页抓取的入门指南,包含分步教程。
如何使用 Python 抓取 JavaScript 渲染的网站
借助 Requests 和 Beautiful Soup,您可以通过抓取静态数据来学习基本技能。如果您想针对动态网站并学习如何处理无限滚动和延迟加载等问题,请使用 Selenium。该工具控制 无头浏览器 并且完全能够处理动态页面。
使用 Selenium 进行网页抓取的分步指南。
如何使用 Python 爬取多个页面
虽然抓取单个页面相对简单,但同时处理多个页面可以加快进程并减少等待时间。
AIOHTTP 允许您使用 Python 发出异步 HTTP 请求,因此您可以同时抓取多个页面。我们准备了一个教程,指导您使用 AIOHTTP 发送非阻塞请求,一次处理多个页面,而无需等待每个请求完成。
并行抓取多个页面。
使用 Python 处理 Cookie、标头和代理
在抓取网站时,了解如何处理 Cookie、标头和代理以模拟真实用户行为并避免 IP 阻止非常重要。Cookie 有助于维护会话,标头可让您将抓取工具模拟为真实浏览器,而代理可帮助您通过轮换 IP 来避免 IP 检测。这些元素中的每一个都可以使用 Python 中的不同工具进行管理。
你可以使用一个工具来管理这一切 卷曲,一个命令行工具。通过将 cURL 与 Python 集成,您可以发出请求、发送自定义标头、管理 cookie 以及设置代理。
本教程将向您展示使用 cURL 和 Python 来收集数据的基础知识。
如果您使用 Selenium,则可以自行设置代理。您可以在浏览器自动化中配置代理服务器,这样您就可以在模拟多个页面上的真实用户行为的同时轮换 IP。
了解如何使用 Selenium 设置代理服务器。
对于使用 Python Requests 库的人来说,设置代理也很简单,并允许你通过不同的 IP 路由你的请求。
了解如何使用 Python Requests 运行代理。
Node.js 入门
关于 Python 已经讲得够多了,让我们来看看 Node.js。那么,你想用 Node.js 构建你的第一个网页抓取工具。你该怎么做呢?其实很简单,只需几行代码就可以开始,但你应该遵循以下几个步骤:
- 如果你是网页抓取新手,可以从以下库开始 切里奥 和 爱可信. 爱可信 会帮助你从网站获取 HTML,同时 切里奥 将允许您解析和操作 HTML,类似于 jQuery 的工作方式。
- 选择目标网站并决定要抓取哪些数据。为了练习,请选择一个简单的网站或使用演示网站 - 我们已经 准备了一份完整的清单。
- 您需要一个代码编辑器来编写脚本。您可以使用任何您喜欢的编辑器 -Visual Studio代码, 记事本+ +,甚至是您机器上的内置编辑器。
一旦完成所有设置,您就可以开始编写第一个 Node.js 脚本来发送 HTTP 请求、解析响应并提取所需的数据。
您需要了解的有关使用 Node.js 和 JavaScript 进行网页抓取的所有内容都集中在一个地方。
使用 Node.js 抓取静态页面
有兴趣从静态网页抓取数据吗? 切里奥 和 爱可信 是抓取静态站点的绝佳选择。
本教程将指导您使用 切里奥 抓取静态内容。 切里奥 帮助您快速选择和操作 HTML 元素,使其非常适合不需要 JavaScript 渲染的网站。
有兴趣从静态网页收集数据吗?Cheerio 和 Axios 库非常适合这项工作。
使用 Node.js 抓取网页动态页面
如果您要抓取的网站使用 JavaScript 动态加载内容,该怎么办?为此,您需要使用可以与 JavaScript 交互的无头浏览器。我们准备了两份指南,介绍如何操作。
首先,我们来看看 Puppeteer。它非常适合抓取动态页面,因为它可以呈现 JavaScript 在页面首次提供后加载的内容。
使用 Node.js 库 Puppeteer 进行网页抓取的分步指南。
如果你想练习使用更高级的功能抓取基于 JavaScript 的网站, 剧作家 是 Puppeteer 的绝佳替代品。本教程将向您展示如何设置 剧作家 从动态网站抓取数据,同时在不同的浏览器上提供更多的灵活性。
想要练习使用基于 JavaScript 的网站的技能吗?我们将向您展示如何操作。