一、引言
网络爬虫通俗来讲就是使用代码将HTML网页的内容下载到本地的过程。爬取网页主要是为了获取网页中的关键信息,例如网页中的数据、图片、视频等。
随着大数据与人工智能的发展,网络爬虫作为获取公开数据的重要手段,广泛应用于舆情监控、市场分析、学术研究等领域。然而,无节制的爬取行为可能对目标服务器造成压力,甚至触犯法律。因此,掌握主流爬虫工具的同时,理解并遵守网络爬虫伦理规范(尤其是 robots.txt 协议),是每一位开发者的基本素养。
二、Python 网络爬虫核心库详解
2.1 urllib 库
Python 标准库的基石
urllib 是 Python 内置的 HTTP 客户端模块,无需额外安装,包含 urllib.request、urllib.parse、urllib.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即可读取此文件的内容。
- URL :
https://www.baidu.com/robots.txt - 格式:纯文本,每行一条指令,区分大小写。

3.2 核心指令说明
(1)User-agent:指定规则适用的爬虫
User-agent: *
*表示适用于所有爬虫;- 可指定具体名称,如
Googlebot、Baiduspider。
🔍 自定义爬虫应设置唯一 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,继续爬取可能被视为恶意行为,甚至面临法律风险。
四、合规爬虫开发最佳实践
-
始终检查
robots.txt
在爬取前访问https://target.com/robots.txt,确认是否允许。 -
设置合理的 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')) -
控制请求频率
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')) -
处理 4xx/5xx 错误
遇到429 Too Many Requests应立即停止。 -
优先使用官方 API
若网站提供 API(如 Twitter、GitHub),应优先调用而非爬取网页。