网络爬虫库与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),应优先调用而非爬取网页。

相关推荐
清水白石00819 小时前
缓存的艺术:Python 高性能编程中的策略选择与全景实战
开发语言·数据库·python
AI Echoes19 小时前
对接自定义向量数据库的配置与使用
数据库·人工智能·python·langchain·prompt·agent
得一录19 小时前
LoRA(Low-Rank Adaptation)的原理和实现
python·算法·机器学习
喵手19 小时前
Python爬虫实战:同名实体消歧 - 店铺/公司名规则合并与标准化等!
爬虫·python·爬虫实战·零基础python爬虫教学·同名实体消歧·店铺/公司名规则合并与标准化
七夜zippoe19 小时前
集成测试实战:构建可靠的测试金字塔体系
python·log4j·e2e·fastapi·持续集成·flask api
yunhuibin19 小时前
VGGNet网络学习
人工智能·python·深度学习·神经网络·学习
hhzz19 小时前
使用Python对MySQL进行数据分析
python·mysql·数据分析
52Hz11820 小时前
力扣39.组合总和、22.括号生成、79.单词搜索
python·leetcode
哈里谢顿20 小时前
从零开始编写一个完整的Python HTTP REST API服务
python
清水白石0081 天前
突破并行瓶颈:Python 多进程开销全解析与 IPC 优化实战
开发语言·网络·python