

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

# 网络爬虫
<a name="kb-managed-ds-webcrawler"></a>

Web Crawler 会连接并抓取您指定用于托管知识库的 URL。Web Crawler 从您的种子 URL 开始遍历 HTML 页面，并根据您的抓取范围和限制跟踪子链接。您也可以提供站点地图 URL 作为起点。根据 [RFC](https://www.rfc-editor.org/rfc/rfc9309.html) 9309，Web Crawler 尊重 robots.txt。

**重要**  
当您选择要抓取的网站时，必须遵守[亚马逊可接受使用政策](https://aws.amazon.com/aup/)以及所有其他亚马逊条款。Web Crawler 仅用于索引您自己的网页或您有权抓取的网页。

**注意**  
Web Crawler 不支持文档级访问控制 (ACL)。任何有权访问知识库的用户都可以访问所有已编入索引的内容。如果您需要 ACL 筛选，请使用支持 ACL 筛选的连接器（例如 Amazon S3 SharePoint、或 OneDrive）。

## 支持的功能
<a name="kb-managed-supported-features-webcrawler"></a>
+ 抓取多个种子网址和网站地图网址
+ 可配置的抓取深度、速率限制和每个 URL 的链接数限制
+ 抓取范围控制：相同的主机和路径、仅限主机或主机和子域
+ URL 模式过滤器（包含和排除正则表达式）
+ 抓取从网页链接的附件（PDF、文档等）
+ 受保护站点的身份验证：基本、基于表单或 SAML
+ 对已添加、更新和删除的内容进行增量内容同步

## 身份验证方法
<a name="kb-managed-webcrawler-auth-methods"></a>

Web Crawler 支持四种身份验证方法。选择与目标站点对用户进行身份验证的方式相匹配的方法。对于没有登录的公共网站，请使用`NO_AUTH`。


**网络爬虫身份验证方法**  

| 方法 | 它如何进行身份验证 | 何时使用 | 
| --- | --- | --- | 
| 不进行身份验证 (NO\_AUTH) | Crawler 发送没有凭据的请求。 | 不需要登录的公共网站。 | 
| 基本身份验证 (BASIC\_AUTH) | 爬虫会发送一个 HTTP Authorization: Basic 标头，其中包含您的密钥中的用户名和密码。 | 受 HTTP 基本身份验证（浏览器风格的用户名和密码对话框）保护的站点。 | 
| 表单身份验证 (FORM) | 爬虫通过提交 HTML 表单进行登录。您需要提供登录 URL、凭据和用于定位表单字段的 XPath 表达式。 | 使用 HTML 表单登录的网站。 | 
| SAML 身份验证 () SAML | 爬虫通过 SAML 身份提供商的登录表单登录。您需要提供 IdP 登录 URL、凭据和用于定位表单字段的 XPath 表达式。 | 使用 SAML-based 单点登录的网站。 | 

## 先决条件
<a name="kb-managed-prereqs-webcrawler"></a>

**对于要抓取的网站，请确保**：
+ 有权抓取网站及其内容。
+ 确认该`robots.txt`网站不允许您抓取您要抓取的网址。如果找不到`robots.txt`文件，Web Crawler 默认不允许。
+ 如果网站需要登录，请确定身份验证方法（基本、表单或 SAML）。对于表单和 SAML，在登录页面上找到用户名字段、密码字段和提交按钮的 XPath 表达式。要查找 XPath，请在浏览器中右键单击表单元素并选择 “**检查**”，然后从开发者工具中复制 XPath。

**在您的 AWS 账户中，请确保**：
+ 如果您的网站需要身份验证，请将您的凭证存储在[AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)中，并记下其亚马逊资源名称 (ARN)。有关确切的键值对，请参见。[身份验证凭证](#kb-managed-webcrawler-credentials)
+ 在知识库的 AWS Identity and Access Management (IAM) role/permissions 策略中包含连接数据源的必要权限。有关所需权限的信息，请参阅[访问数据来源的权限](kb-permissions.md#kb-permissions-access-ds)。

## 如何设置 Web Crawler 数据源
<a name="kb-managed-webcrawler-workflow"></a>

设置 Web Crawler 数据源涉及以下步骤：

1. **（如果您的网站需要登录）准备证书。**将您的身份验证方法的凭据存储在 AWS Secrets Manager 密钥中。请参阅[身份验证凭证](#kb-managed-webcrawler-credentials)。

1. **Connect 数据源。**使用 AWS 管理控制台 或 API 在知识库中创建 Web Crawler 数据源。请参阅[创建数据源](#kb-managed-ds-webcrawler-create)。

## 创建数据源
<a name="kb-managed-ds-webcrawler-create"></a>

------
#### [ Console ]

**将 Web Crawler 连接到您的托管知识库**

1. 在 “**数据源**” 下，为您的数据源提供一个名称。

1. 从数据源下拉列表中选择 **Web Crawler**。

1. 在**来源**下，选择**来源网址**（最多 10 个起点网址）或**来源站点地图（最多 3 个站点地图**网址）。

1. 在**添加网址文本区域中输入您的网址**，每行一个。

1. 在 “**身份验证**” 下，选择 “**无身份验证**”、“**基本身份验证**”、“**表单身份验证**” 或 “**SAML 身份验证**”。对于除**无身份验证**以外的任何方法，请选择或创建 AWS Secrets Manager 密钥来存储您的凭据。

1. （可选）扩展**同步范围**以设置抓取深度 (0—10)、每个 URL 的最大链接数 (1—1000)、每分钟抓取的最大网址数 (1—300) 以及抓取范围：**默认**（与种子 URL 相同的主机和相同的初始 URL 路径）、**仅限主机（相同的主机**、任何路径）或子域名（相同的主域，包括**子**域名）。

1. （可选）展开 **URL 过滤模式**以添加包含或排除特定 URL 的正则表达式。

------
#### [ API ]

要创建 Web Crawler 数据源，请使用 Amazon Bedrock 构建时终端节点的代理发送[CreateDataSource](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_CreateDataSource.html)请求。以下 AWS Command Line Interface 示例创建了一个无需身份验证即可对公共网站进行爬网的数据源。有关每个字段的描述，请参阅下面的连接器参数参考。

```
aws bedrock-agent create-data-source \
 --name "{{WebCrawler-connector}}" \
 --knowledge-base-id "{{your-knowledge-base-id}}" \
 --data-source-configuration file://webcrawler-managed-connector.json
```

该`webcrawler-managed-connector.json`文件包含以下内容：

```
{
    "type": "MANAGED_KNOWLEDGE_BASE_CONNECTOR",
    "managedKnowledgeBaseConnectorConfiguration": {
        "connectorParameters": {
            "type": "WEB",
            "version": "1",
            "connectionConfiguration": {
                "seedUrls": [
                    "{{https://docs.example.com}}"
                ],
                "authType": "NO_AUTH"
            },
            "crawlConfiguration": {
                "crawlDepth": 3,
                "maxLinksPerUrl": 100,
                "maxCrawledUrlsPerMinute": 50,
                "syncScope": "SUB_DOMAINS",
                "crawlAttachments": true
            },
            "filterConfiguration": {
                "exclusionPatterns": [
                    "{{https://docs.example.com/private/.*}}"
                ]
            }
        }
    }
}
```

对于经过身份验证的站点`BASIC_AUTH`，`authType`请设置为`FORM``SAML`、或，然后添加`secretArn`到`connectionConfiguration`。

对于托管知识库，`CreateDataSource`这是异步的：操作完成后，数据源状态`AVAILABLE`会从`CREATING`变为。

------

## 连接器参数
<a name="kb-managed-config-webcrawler"></a>

数据源配置使用以下连接器参数。要使用 Web Crawler，请在中指定`WEB`为连接器类型。`connectorParameters`有关换行字段`connectorParameters`（例如`deletionProtectionConfiguration`和`mediaExtractionConfiguration`），请参阅[连接数据来源](kb-managed-connect-ds.md)。


**connectionConfiguration**  

| 字段 | 必填 | 说明 | 
| --- | --- | --- | 
| seedUrls | 有条件 | 开始抓取的种子网址列表。最大 10。除非您提供，否则为必填项siteMapUrls。 | 
| siteMapUrls | 有条件 | 网站地图网址列表。最多 3 个。除非您提供，否则为必填项seedUrls。 | 
| authType | 是 | 身份验证类型：NO\_AUTHBASIC\_AUTH、FORM、或SAML。请参阅[身份验证方法](#kb-managed-webcrawler-auth-methods)。 | 
| secretArn | 有条件 | 包含您的凭据的 AWS Secrets Manager 密钥的 ARN。如果不authType是，则为必填项NO\_AUTH。 | 


**抓取配置（可选）**  

| 字段 | 必填 | 说明 | 
| --- | --- | --- | 
| crawlDepth | 否 | 最大爬行深度。射程 0—10。 0仅抓取指定的 URL；较高的值会跟踪网站更深层次的链接。默认值为 2。 | 
| maxLinksPerUrl | 否 | 每个 URL 可关注的最大链接数。射程 1—1000。默认值为 100。 | 
| maxCrawledUrlsPerMinute | 否 | 每分钟抓取的最大 URL 数（速率限制）。射程 1—300。 | 
| implicitWaitInSeconds | 否 | 页面进入就绪状态后，爬虫才会读取该页面的等待时间（以秒为单位）。对于在主模板之后加载的动态 JavaScript 内容的页面，请增加此值。 | 
| syncScope | 否 | 要关注的链接范围。PATH\_SPECIFIC（与种子 URL 相同的主机和相同的初始 URL 路径）、DOMAINS\_ONLY（与种子 URL 相同的主机、任何路径）或SUB\_DOMAINS（相同的主域，包括子域名）之一。省略时，抓取工具仅抓取与种子 URL 相同的主机和相同的初始 URL 路径。 | 
| crawlAttachments | 否 | 是否抓取从网页链接的文件和附件（例如 PDF 和其他文档）。 | 


**过滤器配置（可选）**  

| 字段 | 必填 | 说明 | 
| --- | --- | --- | 
| inclusionPatterns | 否 | 正则表达式列表。只有与至少一种模式匹配的网址才会被抓取和索引。 | 
| exclusionPatterns | 否 | 正则表达式列表。匹配任何模式的 URL 都不会被抓取或编入索引。 | 
| maxFileSizeInMegaBytes | 否 | 爬网程序摄取的任何单个文件的最大大小（以兆字节为单位）。以数字字符串形式提供（例如，"500"）。默认值为 "500"。 | 

## 身份验证凭证
<a name="kb-managed-webcrawler-credentials"></a>

如果您的网站需要身份验证，请将您的凭据存储在 AWS Secrets Manager 密钥中。密钥格式取决于您选择的身份验证类型。

**基本身份验证 (`BASIC_AUTH`)**

```
{
    "userName": "{{your-username}}",
    "password": "{{your-password}}",
    "authentication": "BASIC_AUTH"
}
```

**表单身份验证 (`FORM`)**

对于基于表单的身份验证，请提供标识登录页面上的用户名字段、密码字段和提交按钮的 XPath 表达式。

```
{
    "authentication": "FORM",
    "loginPageUrl": "{{https://example.com/login}}",
    "userName": "{{your-username}}",
    "password": "{{your-password}}",
    "userNameFieldXpath": "{{//input[@name='username']}}",
    "passwordFieldXpath": "{{//input[@name='password']}}",
    "userNameButtonXpath": "{{//button[@type='submit']}}",
    "passwordButtonXpath": "{{//button[@type='submit']}}"
}
```

**SAML 身份验证 () `SAML`**

对于 SAML 身份验证，请提供 SAML 身份提供商的登录页面 URL 和表单字段的 XPath 表达式。

```
{
    "authentication": "SAML",
    "loginPageUrl": "{{https://your-idp.example.com/login}}",
    "userName": "{{your-username}}",
    "password": "{{your-password}}",
    "userNameFieldXpath": "{{//input[@name='username']}}",
    "passwordFieldXpath": "{{//input[@name='password']}}",
    "userNameButtonXpath": "{{//button[@type='submit']}}",
    "passwordButtonXpath": "{{//button[@type='submit']}}"
}
```

**注意**  
要在浏览器中查找 XPath，请在登录页面上右键单击表单元素并选择 “**检查**”。在开发者工具中，右键单击突出显示的 HTML，选择 “**复制**”，然后选择 “**复制 XPath**”。

## 问题排查
<a name="kb-managed-ds-webcrawler-troubleshooting"></a>


**常见的网络爬虫问题、原因和修复方法**  

| 症状 | 可能的原因 | Fix | 
| --- | --- | --- | 
| 同步成功完成，但只有种子 URL 被编入索引。 | 网站导航链接是通过 JavaScript 事件处理程序（单击、滚动、动态菜单）而不是标准<a href="...">元素连接的。爬虫会渲染 JavaScript 但不模拟用户互动，因此它无法发现这些链接。 | 为你想要抓取的页面提供额外的种子网址，或者提供一个列出所有要抓取的网址的站点地图网址。如果可以将内容导出为文件，请考虑改用 Amazon S3 连接器。 | 
| Sync 不返回任何内容或页面数少于预期。 | 该网站robots.txt的文件不允许你抓取你想要抓取的网址，或者页面有noindex元标记。 | 更新robots.txt主机，使其允许抓取你想要的路径，或者从你想要编入索引的页面中移除noindex元标记。robots.txt如果您还想检测元标记，请不要屏蔽该页面，因为爬虫必须访问该页面才能读取元标记。 | 
| 身份验证失败（HTTP 401 或 403、登录重定向循环或会话超时）。 | 凭据不正确或已过期，或者 XPath 表达式与登录页面元素不匹配。 | 验证您的密钥中的凭证。对于FORM或SAML身份验证，请在浏览器的开发者工具中验证每个 XPath，然后进行验证。loginPageUrl | 
| 由于速率限制 (HTTP 429) 或内容不完整，同步失败。 | 抓取工具获取页面的速度超过了网站允许的速度。 | implicitWaitInSeconds对于具有动态内容且在页面准备就绪后加载的网站，请降低maxCrawledUrlsPerMinute或增加。 | 
| 页面丢失是因为它们比预期的要大。 | 页面或附件超出范围maxFileSizeInMegaBytes。 | 增加maxFileSizeInMegaBytes或接受不载入大于限制的文件。 | 