网络抓取是一种从网站提取数据的强大技术,但必须负责任地使用。了解并尊重 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
其他考虑因素
- 有些搜索引擎对
robots.txt
文件,通常为 500KB。确保文件不超过此限制。 - "(《世界人权宣言》)
robots.txt
文件应使用 UTF-8 编码。使用其他编码可能无法正确解析。 - 有些爬虫(如 Googlebot)支持在
不允许
和允许
指令(例如*
任何字符、$
表示字符串的结尾)。禁止:/private/* 禁止:/temp/$
- "(《世界人权宣言》)
robots.txt
文件区分大小写。例如/Admin/
和/admin/
是不同的路径。 - 人们可以使用
#
符号在文件中添加注释,这些注释会被爬虫忽略,但可以帮助管理员理解和维护文件。# 防止所有爬虫访问管理页面 用户代理:* 禁止:/admin/
- 在使用
robots.txt
文件到生产环境中,使用工具(如 Google Search Console 中的 robots.txt 测试器)测试规则,确保它们按预期运行。 - 对于大型网站或有动态内容的网站,可能需要动态生成
robots.txt
文件。确保生成的文件始终有效,并包含所有必要的规则。 - 并非所有爬虫都遵守
robots.txt
文件规则,因此可能需要采取其他措施(如服务器防火墙、IP 黑名单等)来保护敏感内容不受恶意爬虫的攻击。 - 如果您想阻止搜索引擎索引特定页面,但允许爬虫访问这些页面以获取其他内容,请使用
无索引
元标记,而不是不允许
.<meta name="robots" content="noindex">
- 尽量保持
robots.txt
文件简单明了,避免规则过于复杂。复杂的规则可能难以维护,并可能导致潜在的解析错误。
robots.txt 如何影响网络抓取
-
爬虫指南
robots.txt 的主要功能是向网络爬虫提供网站哪些部分不能访问的说明。例如,如果 robots.txt 中禁止访问某个文件或目录,爬虫就会避开这些区域。
-
尊重 robots.txt
- 道德搜索 作为对网站所有者的一种礼貌,许多合乎道德的网络刮擦和爬虫都会遵守 robots.txt 中规定的规则,以避免服务器超载。
- 法律考虑因素: 虽然不具有法律约束力,但忽视 robots.txt 有时会导致法律问题,特别是在刮擦造成损害或违反服务条款的情况下。
-
不允许的路径与允许的路径
- 不允许的路径: 这些指令使用 Disallow 指令指定。例如
禁止:/private-data/
表示所有爬虫都应避免访问 /private-data/ 目录。 - 允许的路径 如果允许使用某些目录或页面,可以使用 Allow 指令指定它们。
- 不允许的路径: 这些指令使用 Disallow 指令指定。例如
-
用户代理专用规则
robots.txt 文件可以使用用户代理指令为不同的爬虫指定规则。
例如
User-agent:Googlebot
禁止:/no-google/这将阻止 Googlebot 访问 /no-google/,但允许其他爬虫访问。
-
服务器负载
通过遵循 robots.txt 指南,搜刮者可以降低服务器超载的风险,因为如果请求过多过快,服务器就会超载。
-
不是安全机制
robots.txt 文件不是一种安全功能。它是一个指南,而不是限制。它依赖于爬虫尊重规定的规则。恶意抓取程序或被编程为忽略 robots.txt 的程序仍然可以访问不允许的区域。
-
合规与最佳实践
- 尊重 robots.txt: 为避免潜在冲突并尊重网站运营商,刮擦器应遵守 robots.txt 中定义的规则。
- 考虑 robots.txt 状态: 刮擦网站前一定要检查 robots.txt,以确保符合网站的政策。
关于 robots.txt 的常见误解
-
robots.txt 具有法律约束力
robots.txt 不是法律合同,而是管理爬虫访问的协议。虽然它对合乎道德的抓取至关重要,但在法律上并不强制执行访问限制。
-
robots.txt 可防止所有抓取行为
robots.txt 是针对机器人和爬虫的指南,但并不能阻止所有形式的搜刮。人工抓取或复杂工具仍可访问受限区域。
-
robots.txt 确保敏感数据的安全
robots.txt 不是一项安全功能。它的目的是管理爬虫的访问,而不是保护敏感信息。
如何使用 robots.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 免费试用!

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