前言
网络爬虫(Web Crawler)是互联网数据获取的重要工具。学习爬虫需要掌握一定的 Python 基础语法,包括变量、函数、面向对象编程等。本文将带你系统了解爬虫的基本原理、工作流程以及如何使用 Python 的 requests 库进行数据采集。
本文详细介绍了 Python 网络爬虫的基础知识,涵盖爬虫定义、浏览器工作原理对比、爬虫四步工作流程(获取、解析、提取、存储)。重点讲解了 requests 库的使用方法,包括 get 请求、Response 对象属性(status_code、content、text、encoding)、请求头设置(User-Agent)、异常处理及多种数据保存方式(文本、CSV、JSON)。文章旨在帮助初学者建立爬虫系统认知并掌握基础代码实现。

网络爬虫(Web Crawler)是互联网数据获取的重要工具。学习爬虫需要掌握一定的 Python 基础语法,包括变量、函数、面向对象编程等。本文将带你系统了解爬虫的基本原理、工作流程以及如何使用 Python 的 requests 库进行数据采集。
从本质上来说,爬虫就是利用程序自动抓取网络上对我们有价值的数据。爬虫的应用场景非常广泛:
人工智能的发展离不开海量数据,而爬虫正是获取这些数据的关键源头。从搜索巨头到人工智能巨头,爬虫技术在其中扮演了基础性的角色。
手动通过浏览器上网下载数据效率低下且难以规模化。爬虫可以模拟人类行为,自动化完成以下任务:
明确学习目标对于学习爬虫至关重要。建议在学习过程中记录自己的需求,如'我想抓取某类商品数据'或'我想分析某社交媒体舆情',这将帮助你在遇到技术瓶颈时保持动力。
要理解爬虫,首先需要理解浏览器是如何工作的。现代浏览器(以 Chrome 为例)采用多进程架构,以提高稳定性和安全性。
完整的交流过程涉及人、浏览器、服务器三者:
爬虫的工作原理与浏览器类似,但去除了图形界面部分,专注于数据的获取与处理。
爬虫可以代劳浏览器工作过程中的关键步骤。其核心工作流程分为四步:
第 0 步:获取数据 爬虫程序根据提供的网址(URL),向服务器发起 HTTP 请求,获取服务器返回的原始数据(Response)。
第 1 步:解析数据 将服务器返回的原始数据(如 HTML 源码、JSON 字符串)解析成结构化格式,便于程序读取。
第 2 步:提取数据 根据预设规则,从解析后的数据中提取出需要的具体字段(如标题、价格、作者等)。
第 3 步:储存数据 将提取到的数据保存到本地文件(如 TXT、CSV、JSON)或数据库中,以便后续分析和使用。
无论后续学习内容如何深入,这四大步骤始终是爬虫的核心逻辑。
在 Python 中,requests 是最常用的 HTTP 请求库。它封装了底层复杂的网络细节,提供了简洁的 API。
如果本地未安装,可通过终端命令安装:
pip install requests
在代码中引入库:
import requests
requests.get() 用于发送 GET 请求。基本用法如下:
# 发送请求,参数为 URL
res = requests.get('https://example.com')
Response 对象,包含服务器返回的所有信息。Response 对象是处理数据的核心。以下是四个最常用的属性:
检查请求是否成功。常见的状态码包括:
200:请求成功。404:资源未找到。500:服务器内部错误。403:禁止访问。print(res.status_code)
返回响应的二进制数据,适用于下载图片、音频、视频等非文本文件。
# 下载图片示例
pic = res.content
with open('image.jpg', 'wb') as f:
f.write(pic)
返回响应的文本内容,适用于网页源代码、API 返回的 JSON 字符串等。
# 获取小说内容
novel = res.text
print(novel[:800])
注意:如果编码识别不正确,可能会出现乱码。
当 text 出现乱码时,可手动指定编码格式。
res.encoding = 'utf-8'
novel = res.text
许多网站会检测请求头中的 User-Agent,如果检测到是 Python 脚本而非真实浏览器,可能会拒绝服务(返回 403)。因此,设置请求头非常重要。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
res = requests.get('https://example.com', headers=headers)
网络请求可能因超时、断网等原因失败,必须添加异常处理机制。
try:
res = requests.get(url, timeout=10)
res.raise_for_status() # 如果状态码不是 200,抛出异常
except Exception as e:
print(f"请求失败:{e}")
除了保存为文本,还可以将数据保存为 CSV 或 JSON 格式,方便数据分析。
保存为 CSV:
import csv
with open('data.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(['Title', 'Price'])
writer.writerow(['Example Book', '100'])
保存为 JSON:
import json
data = {'name': 'Spider', 'version': '1.0'}
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
本文介绍了爬虫的基本概念、浏览器与爬虫的工作流程差异,并详细讲解了如何使用 Python 的 requests 库获取数据、解析响应以及处理常见编码问题。掌握了这些基础知识后,你可以进一步学习正则表达式、BeautifulSoup、XPath 等解析工具,构建更强大的爬虫系统。
在实际开发中,请遵守相关法律法规及网站的 robots.txt 协议,合理控制请求频率,避免对目标服务器造成过大压力。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online