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

相关推荐
2301_788756062 小时前
Python在2024年的主要趋势与发展方向
jvm·数据库·python
阿部多瑞 ABU2 小时前
`tredomb`:一个面向「思想临界质量」初始化的 Python 工具
前端·python·ai写作
u0109272712 小时前
Python虚拟环境(venv)完全指南:隔离项目依赖
jvm·数据库·python
m0_686041612 小时前
Python类型提示(Type Hints)详解
jvm·数据库·python
矢志航天的阿洪2 小时前
从GitHub到本地:Python IGRF库环境配置完全指南
开发语言·python·github
weixin199701080163 小时前
加盟网 item_search - 根据关键词获取行业列表接口对接全攻略:从入门到精通
java·python
喵手3 小时前
Python爬虫实战:采集巨潮资讯网等上市公司公告数据,通过智能关键词匹配技术识别分红、回购、停牌等重要信息(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集巨潮资讯数据·智能匹配识别分红、回购等信息·csv导出+sqlite
cyforkk3 小时前
11、Java 基础硬核复习:常用类和基础API的核心逻辑与面试考点
java·python·面试
小鸡吃米…3 小时前
机器学习 —— 数据缩放
人工智能·python·机器学习