图书馆

Robots.txt 中的网络抓取:最佳实践

从网站 robot.txt 中抓取网页

网络抓取是一种从网站提取数据的强大技术,但必须负责任地使用。了解并尊重 robots.txt 文件是网络搜刮的关键因素之一。本文将深入介绍 robots.txt、它在网络搜刮中的作用以及应遵循的最佳做法。

什么是 robots.txt?

robots.txt 文件是网站用于与网络爬虫和机器人交流的标准。它规定了自动系统可以或不可以访问网站的哪些部分。虽然 robots.txt 主要是为搜索引擎设计的,但它也会影响网络抓取行为。

目的

robots.txt 的主要目的是指示网络爬虫(如搜索引擎的爬虫)允许抓取或索引网站的哪些页面或部分。这有助于防止某些内容出现在搜索引擎结果中、管理服务器负载以及控制私人或敏感信息的可访问性。有了它,网站管理员就能控制和管理网络爬虫的活动,防止过载并保护敏感数据。

地点

robots.txt 文件必须放在网站的根目录下。例如,可以通过 http://www.example.com/robots.txt.

格式

该文件由简单文本组成,遵循基本结构。它包括一些指令,用于指定哪些用户代理(机器人)应遵守哪些规则。

共同指令:

  • 用户代理

    定义以下规则适用于哪个网络爬虫。
    例如 用户代理:*
    星号 (*) 是一个通配符,适用于所有机器人。

  • 不允许

    指定爬虫不应访问的路径或页面。
    例如 禁止:/private/
    这样,机器人就不会抓取任何以 /private/ 开头的 URL。

  • 允许

    覆盖特定路径的禁止指令。
    例如 允许:/private/public-page.html
    这样,即使 /private/ 被禁止,爬虫也可以访问 public-page.html。

  • 爬行延迟

    设置请求之间的延迟时间,以管理服务器负载。
    例如 爬行延迟10

  • 网站地图

    表示 XML 网站地图的位置,以帮助爬虫更有效地查找和索引页面。
    例如 网站地图: http://www.example.com/sitemap.xml

robots.txt 文件示例

用户代理:*
禁止:/private/
允许/private/public-page.html
抓取延迟12
网站地图: http://www.example.com/sitemap.xml

其他考虑因素

  1. 有些搜索引擎对 robots.txt 文件,通常为 500KB。确保文件不超过此限制。
  2. "(《世界人权宣言》) robots.txt 文件应使用 UTF-8 编码。使用其他编码可能无法正确解析。
  3. 有些爬虫(如 Googlebot)支持在 不允许允许 指令(例如 * 任何字符、 $ 表示字符串的结尾)。
    禁止:/private/*
    禁止:/temp/$
  4. "(《世界人权宣言》) robots.txt 文件区分大小写。例如 /Admin//admin/ 是不同的路径。
  5. 人们可以使用 # 符号在文件中添加注释,这些注释会被爬虫忽略,但可以帮助管理员理解和维护文件。
    # 防止所有爬虫访问管理页面
    用户代理:*
    禁止:/admin/
  6. 在使用 robots.txt 文件到生产环境中,使用工具(如 Google Search Console 中的 robots.txt 测试器)测试规则,确保它们按预期运行。
  7. 对于大型网站或有动态内容的网站,可能需要动态生成 robots.txt 文件。确保生成的文件始终有效,并包含所有必要的规则。
  8. 并非所有爬虫都遵守 robots.txt 文件规则,因此可能需要采取其他措施(如服务器防火墙、IP 黑名单等)来保护敏感内容不受恶意爬虫的攻击。
  9. 如果您想阻止搜索引擎索引特定页面,但允许爬虫访问这些页面以获取其他内容,请使用 无索引 元标记,而不是 不允许.
    <meta name="robots" content="noindex">
  10. 尽量保持 robots.txt 文件简单明了,避免规则过于复杂。复杂的规则可能难以维护,并可能导致潜在的解析错误。

robots.txt 如何影响网络抓取

  1. 爬虫指南

    robots.txt 的主要功能是向网络爬虫提供网站哪些部分不能访问的说明。例如,如果 robots.txt 中禁止访问某个文件或目录,爬虫就会避开这些区域。

  2. 尊重 robots.txt

    • 道德搜索 作为对网站所有者的一种礼貌,许多合乎道德的网络刮擦和爬虫都会遵守 robots.txt 中规定的规则,以避免服务器超载。
    • 法律考虑因素: 虽然不具有法律约束力,但忽视 robots.txt 有时会导致法律问题,特别是在刮擦造成损害或违反服务条款的情况下。
  3. 不允许的路径与允许的路径

    • 不允许的路径: 这些指令使用 Disallow 指令指定。例如 禁止:/private-data/ 表示所有爬虫都应避免访问 /private-data/ 目录。
    • 允许的路径 如果允许使用某些目录或页面,可以使用 Allow 指令指定它们。
  4. 用户代理专用规则

    robots.txt 文件可以使用用户代理指令为不同的爬虫指定规则。

    例如

    User-agent:Googlebot
    禁止:/no-google/

    这将阻止 Googlebot 访问 /no-google/,但允许其他爬虫访问。

  5. 服务器负载

    通过遵循 robots.txt 指南,搜刮者可以降低服务器超载的风险,因为如果请求过多过快,服务器就会超载。

  6. 不是安全机制

    robots.txt 文件不是一种安全功能。它是一个指南,而不是限制。它依赖于爬虫尊重规定的规则。恶意抓取程序或被编程为忽略 robots.txt 的程序仍然可以访问不允许的区域。

  7. 合规与最佳实践

    • 尊重 robots.txt: 为避免潜在冲突并尊重网站运营商,刮擦器应遵守 robots.txt 中定义的规则。
    • 考虑 robots.txt 状态: 刮擦网站前一定要检查 robots.txt,以确保符合网站的政策。

关于 robots.txt 的常见误解

  1. robots.txt 具有法律约束力

    robots.txt 不是法律合同,而是管理爬虫访问的协议。虽然它对合乎道德的抓取至关重要,但在法律上并不强制执行访问限制。

  2. robots.txt 可防止所有抓取行为

    robots.txt 是针对机器人和爬虫的指南,但并不能阻止所有形式的搜刮。人工抓取或复杂工具仍可访问受限区域。

  3. robots.txt 确保敏感数据的安全

    robots.txt 不是一项安全功能。它的目的是管理爬虫的访问,而不是保护敏感信息。

如何使用 robots.txt 从网站上抓取页面

使用 python 搜刮网络机器人 txt

1.准备扫描

设置环境

安装必要的 Python 图书馆

导入请求
从 bs4 导入 BeautifulSoup
导入时间

选择正确的工具

  • 请求: 用于发出 HTTP 请求。
  • 美丽汤 用于解析 HTML 和 XML。
  • Scrapy: 全面的网络搜刮框架
  • 硒: 用于与动态加载的内容进行交互。

评估网站的服务条款

查看网站的服务条款,确保您的行为符合其政策。有些网站明确禁止刮擦。

2.小心刮擦

获取并解析 robots.txt

首先,检查 robots.txt 文件,了解网站的抓取规则:

response = requests.get('https://example.com/robots.txt')
robots_txt = response.text

def parse_robots_txt(robots_txt):
    rules = {}
    user_agent = '*'
    for line in robots_txt.split('\n'):
        if line.startswith('User-agent'):
            user_agent = line.split(':')[1].strip()
        elif line.startswith('Disallow'):
            path = line.split(':')[1].strip()
            rules[user_agent] = rules.get(user_agent, []) + [path]
    返回 rules

rules = parse_robots_txt(robots_txt)

识别允许和不允许的路径

根据 robots.txt 指令确定您可以合法、合乎道德地访问哪些路径:

allowed_paths = [path for path in rules.get('*', []) if not path.startswith('/')] 允许的路径

以合乎道德的方式处理不允许的路径

如果您需要从禁止的路径获取数据,或想抓取受 robots.txt 保护的网站,请考虑以下选项:

  • 联系网站所有者: 请求允许访问数据。
  • 使用替代方法: 探索应用程序接口或公共数据来源。

3.其他数据访问方法

应用程序接口及其优势

许多网站都提供 API,可对其数据进行结构化访问。使用 API 通常比刮擦更可靠、更受尊重。

公共数据来源

查找可能满足您需求的公开数据。政府网站、研究机构和开放数据平台都是不错的选择。

数据共享协议

与网站所有者联系,协商数据共享协议。这样可以在尊重网站政策的前提下访问数据。

4.高级技术

抓取动态加载的内容

使用 Selenium 或类似工具刮取 JavaScript 动态加载的内容:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://example.com')
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

使用无头浏览器

无头浏览器(如 Headless Chrome 或 PhantomJS)可以在不显示用户界面的情况下与网页进行交互,因此非常适合用于抓取动态内容。

避免检测和处理率限制

轮换用户代理,使用代理,并在请求之间实施延迟,以模仿人类行为,避免被拦截。

OkeyProxy 是一款功能强大的代理服务器,支持 自动轮换住宅 IP 高质量。ISP 在全球提供超过 1.5 亿个 IP,现在注册即可获得 1GB 免费试用!

okeyproxy

立即开始测试优秀代理!

结论

根据本指南,您可以在遵守道德和法律标准的同时,利用 robots.txt 解决从网站上抓取网页的复杂问题。尊重 robots.txt 不仅能帮助你避免潜在的法律问题,还能确保与网站所有者的合作关系。祝您搜刮愉快!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部
翻译 >>