Python 网络爬虫技术基础与实战指南
一、引言
网络爬虫(Web Crawler),又称网页蜘蛛或网络机器人,是一种按照既定规则自动抓取万维网信息的程序或脚本。它在数据采集、搜索引擎索引、舆情监控等领域发挥着核心作用。本文将深入讲解 HTTP 协议基础、Python 爬虫常用库的使用,并通过豆瓣电影数据爬取案例,演示从请求到存储的完整流程。
二、HTTP 协议基础
1. 协议概述
HTTP(HyperText Transfer Protocol)是超文本传输协议,用于客户端和服务器之间的通信。HTTPS 则是基于 SSL/TLS 的安全版本,对传输数据进行加密。默认端口分别为 80 和 443。
2. 请求与响应
HTTP 通信由两部分组成:客户端请求消息与服务器响应消息。
- 请求报文:包含请求行(方法、URL、版本)、请求头(Headers)、空行、请求体(Body)。
- 响应报文:包含状态行(状态码、描述)、响应头、空行、响应体。
浏览器发送 HTTP 请求的过程通常如下:
- 用户在地址栏输入 URL 并按回车,浏览器向 HTTP 服务器发送请求。
- 服务器处理请求并返回响应对象。
- 浏览器分析 HTML,发现引用资源(图片、CSS、JS)后再次发送请求。
- 所有文件下载完成后,网页渲染显示。
3. 常见状态码
响应状态代码由三位数字组成,第一个数字定义了响应的类别:
- 1xx:信息提示,表示服务器成功接收部分请求。
- 2xx:成功。如 200 OK 表示请求成功。
- 3xx:重定向。如 302 Found 表示临时转移至新 URL。
- 4xx:客户端错误。如 404 Not Found 表示页面不存在,403 Forbidden 表示权限不足。
- 5xx:服务端错误。如 500 Internal Server Error 表示服务器内部错误。
三、Python 爬虫核心库
1. requests 模块
requests 是 Python 中最流行的 HTTP 库,用来获取目标网页文本。它简化了 HTTP 请求的复杂性,支持 Session 保持连接、Cookie 管理、代理设置等高级功能。
2. BeautifulSoup / lxml
- BeautifulSoup:能从 HTML 或 XML 文件中提取数据的库,提供导航、搜索和修改解析树的功能,适合初学者。
- lxml:性能更优,支持 XPath 表达式,适合处理大型文档。
3. 数据库操作
使用 pymysql 封装 MySQL 接口,实现对数据库的读写。在实际项目中,建议定义一个 DBHelper 类来二次封装操作,提高代码复用性。
四、实战案例:爬取豆瓣 Top250
1. 目标网页分析
以豆瓣电影 Top250 为例,目标链接为 https://movie.douban.com/top250。
- 翻页机制:每页显示 25 条数据。点击下一页时,URL 参数
start发生变化,例如?start=25&filter=。这表明下一页是从第 25 条数据开始加载的。 - 关键信息:电影名称、排名、评分、作者、简介。
2. 反爬策略应对
- User-Agent:随机生成合法的 User-Agent 作为请求头一部分,避免被识别为脚本。


