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

相关推荐
NGC_66113 小时前
Java基础面试题2
java·开发语言·python
vx-程序开发3 小时前
springboot具备推荐和预警机制的大学生兼职平台的设计与实现-计算机毕业设计源码17157
java·c++·spring boot·python·spring·django·php
EnCi Zheng3 小时前
11a. 阿里云大模型API调用基础
人工智能·python·阿里云·云计算
MoRanzhi12033 小时前
Pillow 图像算术运算与通道计算
图像处理·人工智能·python·计算机视觉·pillow·图像差异检测·图像算术运算
怪侠_岭南一只猿4 小时前
爬虫阶段三实战练习题二:使用 Selenium 模拟爬取拉勾网职位表
css·爬虫·python·selenium·html
前端付豪4 小时前
自动学习建议解决薄弱知识点
前端·python·openai
deephub4 小时前
LangGraph vs Semantic Kernel:状态图与内核插件的两条技术路线对比
人工智能·python·深度学习·大语言模型·agent
与虾牵手4 小时前
多轮对话 API 怎么实现?从原理到代码,踩完坑我总结了这套方案
python·aigc·ai编程
geovindu4 小时前
python: Simple Factory Pattern
开发语言·python·设计模式·简单工厂模式
weixin199701080164 小时前
开山网商品详情页前端性能优化实战
java·前端·python