网络爬虫库与robots.txt规则

一、引言

网络爬虫通俗来讲就是使用代码将HTML网页的内容下载到本地的过程。爬取网页主要是为了获取网页中的关键信息,例如网页中的数据、图片、视频等。

随着大数据与人工智能的发展,网络爬虫作为获取公开数据的重要手段,广泛应用于舆情监控、市场分析、学术研究等领域。然而,无节制的爬取行为可能对目标服务器造成压力,甚至触犯法律。因此,掌握主流爬虫工具的同时,理解并遵守网络爬虫伦理规范(尤其是 robots.txt 协议),是每一位开发者的基本素养。


二、Python 网络爬虫核心库详解

2.1 urllib

Python 标准库的基石

urllib 是 Python 内置的 HTTP 客户端模块,无需额外安装,包含 urllib.requesturllib.parseurllib.error 等子模块。

特点

  • 属于标准库,环境兼容性好;
  • API 较底层,代码冗长;
  • 功能完整但使用繁琐。

示例:发送 GET 请求

python 复制代码
from urllib import request, parse

url = 'https://httpbin.org/get'
headers = {'User-Agent': 'Mozilla/5.0'}
req = request.Request(url, headers=headers)
with request.urlopen(req) as resp:
    print(resp.read().decode('utf-8'))

适用场景:轻量级脚本、受限环境(无法安装第三方库)、学习 HTTP 原理。

⚠️ 不推荐用于生产级爬虫项目,因缺乏高级功能(如会话管理、自动 JSON 解析等)。


2.2 requests

"为人类设计的 HTTP 库"

requests 是目前最流行的第三方 HTTP 库,以简洁、优雅的 API 著称。

核心优势

  • 支持 GET/POST/PUT/DELETE 等所有 HTTP 方法;
  • 自动处理 Cookie、重定向、编码;
  • 内置 JSON 解析、文件上传、超时控制;
  • 社区活跃,文档完善。

requests库的安装

在终端中执行以下命令:

python 复制代码
pip install requests

安装成功后可使用以下命令查看库的信息:

python 复制代码
pip show requests

运行结果:

适用场景:90% 的静态网页爬取、RESTful API 调用、中小型数据采集任务。

初学者首选,也是工业界事实标准


2.3 Scrapy 框架

专业级分布式爬虫引擎

Scrapy 是一个高性能、可扩展的异步爬虫框架,专为大规模数据抓取设计。

核心特性

  • 内置请求调度器与去重机制;
  • 支持中间件(Middleware)处理请求/响应;
  • Pipeline 机制实现数据清洗、存储(数据库、JSON、CSV);
  • 支持分布式部署(配合 Scrapy-Redis)。

项目结构示例

复制代码
my_spider/
├── scrapy.cfg
└── my_spider/
    ├── __init__.py
    ├── items.py      # 数据模型
    ├── middlewares.py
    ├── pipelines.py  # 数据处理管道
    ├── settings.py   # 配置文件
    └── spiders/
        └── example.py # 爬虫逻辑

适用场景:电商全站爬取、新闻聚合、需要长期维护的大型爬虫系统。

🚀 适合构建企业级爬虫平台


2.4 Selenium

动态页面自动化利器

当目标网站大量依赖 JavaScript 渲染(如 React、Vue 单页应用),传统 HTTP 库无法获取完整内容时,Selenium 成为必要选择。

工作原理

通过 WebDriver 控制真实浏览器(Chrome、Edge、Firefox),模拟用户点击、滚动、输入等操作。

示例:滚动加载百度图片

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('https://image.baidu.com/search?word=热巴')
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
imgs = driver.find_elements(By.TAG_NAME, 'img')

替代方案 :微软推出的 Playwright 更快、更稳定,支持自动等待元素,是 2025 年后的新趋势。

适用场景:登录验证码、动态加载内容(微博、抖音网页版)、需要交互的页面。

⚠️ 资源消耗大,仅在必要时使用


三、网络爬虫伦理规范:robots.txt 协议详解

robots.txt 是网站根目录下的一个文本文件,用于告知爬虫哪些页面可以抓取,哪些禁止访问。属于网站自定的爬取规则,不是网站中的所有信息都允许被爬取,也不是所有的网站都允许被爬取。

3.1 文件位置与格式

在大部分网站的根目录中存在一个robots.txt文件,该文件用于声明此网站中禁止访问的url和可以访问的url。用户只需在网站域名后面加上/robots.txt即可读取此文件的内容。

  • URLhttps://www.baidu.com/robots.txt
  • 格式:纯文本,每行一条指令,区分大小写。

3.2 核心指令说明

(1)User-agent:指定规则适用的爬虫
复制代码
User-agent: *
  • * 表示适用于所有爬虫;
  • 可指定具体名称,如 GooglebotBaiduspider

🔍 自定义爬虫应设置唯一 User-agent 名称,便于网站管理员识别。

(2)Disallow:禁止访问的路径
复制代码
Disallow: /admin/
Disallow: /private.html
  • 禁止爬取 /admin/ 目录及子页面;
  • 空值 Disallow: 表示允许全部抓取。
(3)Allow:例外允许的路径(优先级高于 Disallow)
复制代码
User-agent: *
Disallow: /images/
Allow: /images/public/
  • 虽然禁止 /images/,但允许 /images/public/
(4)Sitemap:提供网站地图地址
复制代码
Sitemap: https://www.example.com/sitemap.xml
  • 帮助爬虫快速发现可索引页面;
  • 对 SEO 友好,也便于合法爬虫定位数据源。

3.3 实际案例分析

百度 robots.txt 片段https://www.baidu.com/robots.txt):

复制代码
User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
...

User-agent: *
Disallow: /
  • 解读 :只允许自家爬虫 Baiduspider 抓取部分页面,禁止所有其他爬虫Disallow: /)。

重要提醒

robots.txt 中明确禁止你的 User-agent,继续爬取可能被视为恶意行为,甚至面临法律风险。


四、合规爬虫开发最佳实践

  1. 始终检查 robots.txt
    在爬取前访问 https://target.com/robots.txt,确认是否允许。

  2. 设置合理的 User-agent

    复制代码
    from urllib import request, parse
    
    url = 'https://httpbin.org/get'
    headers = {'User-Agent': 'Mozilla/5.0'}
    req = request.Request(url, headers=headers)
    with request.urlopen(req) as resp:
        print(resp.read().decode('utf-8'))
  3. 控制请求频率

    复制代码
    from urllib import request, parse
    
    url = 'https://httpbin.org/get'
    headers = {'User-Agent': 'Mozilla/5.0'}
    req = request.Request(url, headers=headers)
    with request.urlopen(req) as resp:
        print(resp.read().decode('utf-8'))
  4. 处理 4xx/5xx 错误
    遇到 429 Too Many Requests 应立即停止。

  5. 优先使用官方 API
    若网站提供 API(如 Twitter、GitHub),应优先调用而非爬取网页。

相关推荐
极梦网络无忧9 小时前
OpenClaw 基础使用说明(中文版)
python
codeJinger9 小时前
【Python】操作Excel文件
python·excel
XLYcmy9 小时前
一个针对医疗RAG系统的数据窃取攻击工具
python·网络安全·ai·llm·agent·rag·ai安全
Islucas10 小时前
Claude code入门保姆级教程
python·bash·claude
萝卜白菜。10 小时前
TongWeb7.0相同的类指明加载顺序
开发语言·python·pycharm
赵钰老师10 小时前
【ADCIRC】基于“python+”潮汐、风驱动循环、风暴潮等海洋水动力模拟实践技术应用
python·信息可视化·数据分析
爬山算法10 小时前
MongoDB(80)如何在MongoDB中使用多文档事务?
数据库·python·mongodb
YuanDaima204811 小时前
基于 LangChain 1.0 的检索增强生成(RAG)实战
人工智能·笔记·python·langchain·个人开发·langgraph
RopenYuan11 小时前
FastAPI -API Router的应用
前端·网络·python