Python 爬虫入门指南
1. 什么是网络爬虫
'爬虫'是一种形象的说法。互联网被比喻成一张巨大的网,而爬虫(Spider)是一个程序或脚本,在这张网上爬行。当遇到有用的资源(如网页、文件等)时,就将其获取或下载下来。通过资源中的 URL 链接,可以顺藤摸瓜继续爬取更多相关资源。
从本质上讲,爬虫模拟了用户正常上网的行为:打开网页并分析内容以提取所需信息。这一过程涉及 HTTP 传输协议等核心知识。
本文详细介绍了 Python 网络爬虫的基础知识与实战技巧。内容涵盖爬虫工作原理、HTTP 协议基础、Requests 库进行 GET 和 POST 请求的方法、模拟浏览器 Header 设置、使用 BeautifulSoup 解析 HTML 数据以及异常处理机制。文章提供了完整的代码示例,并强调了遵守 robots 协议、控制请求频率及法律合规等最佳实践,适合初学者系统学习。

'爬虫'是一种形象的说法。互联网被比喻成一张巨大的网,而爬虫(Spider)是一个程序或脚本,在这张网上爬行。当遇到有用的资源(如网页、文件等)时,就将其获取或下载下来。通过资源中的 URL 链接,可以顺藤摸瓜继续爬取更多相关资源。
从本质上讲,爬虫模拟了用户正常上网的行为:打开网页并分析内容以提取所需信息。这一过程涉及 HTTP 传输协议等核心知识。
当我们打开一个网页时,实际上发生了以下交互:
爬虫的核心逻辑就是模拟这个过程:构造请求发送到目标服务器,等待并接收响应数据。
HTTP 是 Web 通信的基础协议。在爬虫开发中,最常用的两种请求方式是 GET 和 POST。
GET 方式通常用于获取数据,参数直接附加在 URL 后面。例如搜索关键词会显示在网址中:https://www.baidu.com/s?wd=测试。
? 后面的部分是查询参数。& 连接。key=value。POST 请求通常用于提交数据,参数放在请求体(Body)中,不会显示在 URL 上。适用于登录、表单提交等场景。
虽然 Python 标准库中有 urllib,但推荐使用第三方库 requests,它更简洁且功能强大。
安装命令:
pip install requests
import requests
url = 'http://www.baidu.com/s'
params = {
'wd': 'Python 爬虫',
'ie': 'utf-8'
}
response = requests.get(url, params=params)
print(response.status_code) # 状态码 200 表示成功
print(response.text) # 响应内容
import requests
url = 'http://example.com/login'
data = {
'username': 'user',
'password': 'pass'
}
response = requests.post(url, data=data)
print(response.text)
许多网站设有反爬虫机制,会检查请求头(Header)。如果检测到非浏览器特征(如 User-Agent 为空或为默认值),可能会拒绝服务。
我们需要模拟浏览器的行为,设置必要的 Header。
import requests
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',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
url = 'http://www.example.com'
response = requests.get(url, headers=headers)
注意:可以通过抓包工具(如 Fiddler、Charles)查看真实浏览器发送的请求头,以便准确模拟。
获取到 HTML 源码后,下一步是提取有用数据。处理字符串效率低且易错,推荐使用专门的解析库。
BeautifulSoup 是 Python 最流行的 HTML/XML 解析库之一。
安装依赖:
pip install beautifulsoup4
pip install lxml
from bs4 import BeautifulSoup
html_doc = '''
<html>
<head><title>Test Page</title></head>
<body>
<p class="story">Once upon a time...</p>
<p class="story">And they lived happily ever after.</p>
</body>
</html>
'''
soup = BeautifulSoup(html_doc, 'lxml')
# 获取所有 p 标签
for p in soup.select('p'):
print(p.string.strip())
BeautifulSoup 支持类似 CSS 的选择器语法:
soup.select('p'):获取所有 p 标签。soup.select('#id_name'):获取 id 为 id_name 的元素。soup.select('.class_name'):获取 class 为 class_name 的元素。soup.select('div p'):获取 div 下的所有 p 标签。for tag in soup.select('a'):
href = tag.get('href') # 获取属性
text = tag.get_text() # 获取文本
print(f"Link: {href}, Text: {text}")
网络请求可能因超时、断网或服务器错误而失败,必须添加异常处理。
import requests
from requests.exceptions import Timeout, RequestException
try:
response = requests.get(url, timeout=5)
response.raise_for_status() # 检查 HTTP 状态码
except Timeout:
print("请求超时")
except RequestException as e:
print(f"请求失败:{e}")
else:
print("获取成功")
time.sleep() 增加延迟。本文介绍了 Python 爬虫的基本原理与核心技能,包括 HTTP 请求构造、Header 模拟、HTML 解析及异常处理。掌握这些基础知识后,即可开始尝试编写简单的爬虫程序。建议在实际项目中结合具体需求,深入学习代理池、验证码识别等进阶技术。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online