

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 合乎道德的网络爬虫的最佳实践
<a name="best-practices"></a>

本节讨论了构建收集环境、社会和治理 (ESG) 数据的网络爬取应用程序的最佳实践和关键道德考虑因素。通过遵守这些最佳实践，您可以保护您的项目和组织，并为更负责任和更可持续的网络生态系统做出贡献。这种方法可以帮助您访问有价值的数据，并以尊重所有利益相关者的方式将其用于研究、业务和创新。

## Robots.txt 合规性
<a name="best-practices-robots"></a>

在网站上，robots.txt 文件用于与网络爬虫和机器人进行沟通，告知应该或不应该访问或爬取网站的哪些部分。当网络爬虫在网站上遇到 robots.txt 文件时，它会解析指令并相应地调整其抓取行为。这样可以防止爬虫违反网站所有者的指示，并保持网站与爬虫之间的合作关系。因此，robots.txt 文件有助于访问控制、敏感内容保护、负载管理和法律合规。

我们建议您遵循以下最佳实践：
+ 务必检查并遵守 robots.txt 文件中的规则。
+ 在抓取任何 URL 之前，请检查桌面和移动用户代理的规则。
+ 如果网站仅允许移动用户代理，请使用不同的代理标头，例如移动代理标头，来处理您的请求。

没有 robots.txt 文件并不一定意味着你不能或不应该抓取网站。抓取应始终以负责任的方式进行，尊重网站的资源和所有者的隐含权利。以下是在没有 robots.txt 时推荐的最佳做法：
+ 假设允许爬行，但请谨慎行事。
+ 采取礼貌的抓取做法。
+ 如果您计划进行大规模抓取，可以考虑向网站所有者寻求许可。

## 抓取速率限制
<a name="best-practices-crawl-rate"></a>

使用合理的抓取速率以避免服务器不堪重负。实现请求之间的延迟，可以由 robots.txt 文件指定，也可以使用随机延迟。对于中小型网站，每 10-15 秒 1 个请求可能是合适的。对于较大的网站或具有明确抓取权限的网站，每秒 1-2 个请求可能是合适的。

## 用户代理透明度
<a name="best-practices-user-agent"></a>

在用户代理标题中标识您的爬虫。此 HTTP 标头信息旨在识别请求内容的设备。通常，代理名称中包含 “*机器人*” 一词。爬虫和其他机器人有时会在标题中使用重要字段来包含联系信息。

## 高效爬行
<a name="best-practices-site-map"></a>

使用网站所有者开发的站点地图，将注意力集中在重要页面上。

## 自适应方法
<a name="best-practices-adaptive"></a>

对爬虫进行编程，使其在桌面版本不成功时切换到移动用户代理。这可以为爬虫提供访问权限并减轻网站服务器的压力。

## 错误处理
<a name="best-practices-error-handling"></a>

确保爬网程序正确处理各种 HTTP 状态代码。例如，如果抓取工具遇到 429 状态码（“请求太多”），则应暂停。如果爬虫持续收到 403 状态码（“禁止”），则可以考虑停止抓取。

## 分批爬行
<a name="best-practices-batches"></a>

建议您执行以下操作：
+ 与其 URLs 一次爬行所有任务，不如将任务分成较小的批次。这可以帮助分散负载并降低遇到问题（例如超时或资源限制）的风险。
+ 如果预计整个抓取任务需要长时间运行，可以考虑将其分成多个更小、更易于管理的任务。这可以使流程更具可扩展性和弹性。
+ 如果 URLs 要抓取的数量相对较少，可以考虑使用无服务器解决方案，例如。 AWS Lambda Lambda 函数非常适合短期的事件驱动型任务，因为它们可以自动扩展和处理资源管理。

## 安全性
<a name="best-practices-security"></a>

对于网络爬网计算任务，我们建议您将环境配置为仅允许出站流量。这有助于通过最大限度地减少攻击面和降低未经授权的入站访问的风险来增强安全性。仅允许出站连接允许抓取过程与目标网站通信并检索必要的数据，并且可以限制任何可能危及系统的入站流量。

## 其他考虑因素
<a name="best-practices-other-considerations"></a>

查看以下其他注意事项和最佳实践：
+ 查看网站服务条款或隐私政策中的抓取指南。
+ 在 HTML 中查找可能提供抓取指令的`meta`标签。
+ 请注意您所在司法管辖区有关数据收集和使用的法律限制。
+ 如果网站所有者提出要求，请做好停止抓取的准备。