Python 爬虫技术入门:原理、工具与实战流程
Python 爬虫通过模拟浏览器请求获取网页数据。本文介绍 HTTP 协议基础、Requests 库使用方法、常见请求头设置、代理与 Cookie 处理,以及 JSON、XPath、正则等数据提取技巧。涵盖 GET/POST 请求、错误处理、数据存储方案,并强调遵守 Robots 协议与反爬策略的合规性,适合初学者建立完整的爬虫开发知识体系。

Python 爬虫通过模拟浏览器请求获取网页数据。本文介绍 HTTP 协议基础、Requests 库使用方法、常见请求头设置、代理与 Cookie 处理,以及 JSON、XPath、正则等数据提取技巧。涵盖 GET/POST 请求、错误处理、数据存储方案,并强调遵守 Robots 协议与反爬策略的合规性,适合初学者建立完整的爬虫开发知识体系。

网络爬虫(Web Crawler),又称网络蜘蛛(Spider),是一种按照一定的规则自动浏览网站并提取数据的程序。从技术层面来看,它通过模拟浏览器向目标站点发起 HTTP/HTTPS 请求,获取服务器返回的 HTML 代码、JSON 数据或二进制资源(如图片、视频),然后对数据进行解析和提取,最终将有用信息存储到本地数据库或文件中。
爬虫的核心价值在于自动化数据采集,广泛应用于数据分析、舆情监控、竞品分析等领域。但需注意,爬虫的使用必须遵守法律法规及目标网站的 Robots 协议,严禁用于非法入侵、窃取隐私或攻击性用途。
确保已安装 Python 3.6 及以上版本。建议使用虚拟环境管理依赖,避免污染系统环境。
python -m venv crawler_env
crawler_env\Scripts\activate # Windows
crawler_env/bin/activate # Linux/Mac
pip install requests beautifulsoup4 lxml
爬虫本质上是 HTTP 客户端。理解 HTTP 协议是编写爬虫的前提。
一个完整的 HTTP 请求包含三部分:
200 OK: 请求成功。301 Moved Permanently: 永久重定向。404 Not Found: 资源不存在。500 Internal Server Error: 服务器内部错误。Requests 是 Python 中最流行的 HTTP 库,语法简洁,功能强大。
import requests
url = 'https://www.example.com'
response = requests.get(url)
print(response.status_code) # 输出 200
print(response.text[:100]) # 打印前 100 字符
许多网站会检测 User-Agent,需伪装成浏览器。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
response = requests.get(url, headers=headers)
params 字典传递。data 字典传递表单数据。json 参数传递。# GET 请求带参数
params = {'keyword': 'python', 'page': 1}
response = requests.get('https://api.example.com/search', params=params)
# POST 请求
payload = {'username': 'user', 'password': 'pass'}
response = requests.post('https://api.example.com/login', data=payload)
Session 可以跨请求保持 Cookie,适合处理登录态。
session = requests.Session()
session.headers.update(headers)
# 登录
login_resp = session.post('https://example.com/login', data={'user': 'admin'})
# 访问需要登录的页面
resp = session.get('https://example.com/profile')
使用代理可隐藏真实 IP,提高爬取稳定性。
proxies = {
'http': 'http://127.0.0.1:7890',
'https': 'https://127.0.0.1:7890'
}
response = requests.get(url, proxies=proxies, timeout=10)
网络请求不稳定,必须添加超时和异常捕获。
try:
response = requests.get(url, timeout=5)
response.raise_for_status() # 如果状态码不是 200 则抛出异常
except requests.exceptions.RequestException as e:
print(f'Request failed: {e}')
获取 HTML 后,需从中提取目标数据。常用方法如下:
若接口直接返回 JSON 格式,可直接使用 response.json()。
data = response.json()
name = data['user']['name']
适用于 HTML 解析,语法类似 CSS 选择器。
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('h1').text
items = soup.find_all('div', class_='item')
XPath 功能强大,适合复杂层级结构。
from lxml import etree
tree = etree.HTML(response.text)
# 提取所有链接
links = tree.xpath('//a/@href')
适用于简单文本匹配,灵活性高但维护成本高。
import re
pattern = r'<h1>(.*?)</h1>'
match = re.search(pattern, response.text)
if match:
title = match.group(1)
提取后的数据通常存储至文件或数据库。
import json
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data_list, f, ensure_ascii=False, indent=4)
对于大量数据,建议使用 SQLite 或 MySQL。
import sqlite3
conn = sqlite3.connect('crawler.db')
cursor = conn.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS items (id INTEGER PRIMARY KEY, name TEXT)')
cursor.execute('INSERT INTO items (name) VALUES (?)', ('Item1',))
conn.commit()
conn.close()
访问 https://域名/robots.txt 查看网站允许的抓取范围。虽然无法律强制力,但应遵守道德规范。
避免短时间内高频请求导致被封禁。可使用 time.sleep() 随机休眠。
import time
import random
time.sleep(random.uniform(1, 3))
定期更换 User-Agent 字符串,降低被识别为机器人的风险。
严禁爬取个人隐私数据、商业机密或受版权保护的内容。不得利用爬虫进行短信轰炸、撞库等违法活动。
本文系统介绍了 Python 爬虫的基础知识,涵盖 HTTP 协议、Requests 库使用、数据解析方法及存储方案。初学者应从简单的静态网页入手,逐步掌握动态渲染(Selenium/Playwright)及反爬对抗技巧。始终牢记合法合规原则,构建可持续的数据采集能力。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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