什么是网络爬虫
简单来说,爬虫就是自动抓取网页数据的程序。它模拟浏览器行为,向服务器发送请求,获取 HTML 源码,然后从中提取我们需要的信息。对于初学者来说,理解这个流程是掌握数据抓取的第一步。
核心工作流程
一个完整的爬虫通常包含四个步骤:
- 发送请求:构造 HTTP 请求(GET/POST),带上必要的 Headers(如 User-Agent)。
- 获取响应:接收服务器返回的原始数据(通常是 HTML、JSON 或 XML)。
- 解析数据:利用正则表达式或解析库(如 BeautifulSoup)从源码中定位并提取目标内容。
- 存储结果:将清洗后的数据保存到本地文件、数据库或内存变量中。
环境准备
在开始之前,确保你已安装 Python 3.x。接着安装两个核心库:requests 用于处理网络请求,beautifulsoup4 用于解析 HTML。
pip install requests beautifulsoup4
如果安装过程中遇到网络问题,可以尝试使用国内镜像源加速。
代码实战:抓取一个简单的页面
让我们写一个最基础的脚本,去抓取 httpbin.org 上的示例页面。这里不直接爬取商业网站,而是用公开测试接口来演示逻辑,避免法律风险。
import requests
from bs4 import BeautifulSoup
# 设置目标 URL
url = 'https://httpbin.org/html'
# 构建请求头,伪装成浏览器,防止被简单拦截
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
try:
# 发送 GET 请求
response = requests.get(url, headers=headers, timeout=10)
# 检查状态码,200 表示成功
if response.status_code == 200:
# 设置编码,防止中文乱码
response.encoding = response.apparent_encoding
html_content = response.text
# 初始化解析器
soup = BeautifulSoup(html_content, 'html.parser')
# 查找特定标签,例如 h1 标题
title_tag = soup.find('h1')
if title_tag:
print(f"抓取的标题是:{title_tag.get_text().strip()}")
else:
print("未找到 h1 标签")
else:
print(f"请求失败,状态码:{response.status_code}")
except Exception as e:
print(f"发生错误:{e}")
代码解读:
timeout=10是为了防止网络卡死导致程序无限等待。apparent_encoding让 BeautifulSoup 尝试自动识别编码,比硬编码更安全。get_text().strip()能去掉多余的空白字符,让输出更整洁。
爬虫伦理与法律边界
技术本身是中性的,但使用方式有界限。作为开发者,必须遵守以下原则:
- 尊重 robots.txt:查看目标网站的协议文件,不要抓取禁止爬取的目录。
- 控制频率:不要高频并发请求,以免给服务器造成压力(DDoS 攻击嫌疑)。
- 隐私保护:严禁抓取用户个人隐私数据。
- 版权意识:抓取的数据仅用于学习或合法用途,不得侵犯原作者权益。
掌握基础后,你可以进一步研究动态加载页面(Selenium)、反爬策略应对等进阶内容。保持好奇心,同时守住底线,这才是工程师应有的素养。


