Python 网络爬虫入门指南与实战案例演示
前言
网络爬虫(Web Crawler)是一种自动从互联网上抓取数据的程序。即使是简单的复制粘贴操作,本质上也是一种手动的数据抓取形式。然而,对于需要处理大量非结构化数据的场景,手动操作效率极低且容易出错。网络爬虫能够将网页上的非结构化数据转换为结构化的本地文件或数据库记录,极大地提高了数据处理效率。
Python 网络爬虫利用自动化脚本从网站抓取数据。本文介绍 Python 爬虫核心库如 Requests、BeautifulSoup、Pandas 和 Tqdm 的使用方法。通过实际案例演示如何分析网页结构、发送 HTTP 请求、解析 HTML 提取特定字段(如商品名称、价格),并将结果存储为 CSV 格式。内容涵盖基础步骤、代码实现细节及数据存储方案,适合初学者快速掌握网络数据采集技能。

网络爬虫(Web Crawler)是一种自动从互联网上抓取数据的程序。即使是简单的复制粘贴操作,本质上也是一种手动的数据抓取形式。然而,对于需要处理大量非结构化数据的场景,手动操作效率极低且容易出错。网络爬虫能够将网页上的非结构化数据转换为结构化的本地文件或数据库记录,极大地提高了数据处理效率。
在使用 Python 进行网络爬虫开发时,开发者需要注意遵守目标网站的 robots.txt 协议及服务条款,确保合法合规地获取数据。
Python 因其简洁的语法和丰富的第三方库生态,成为网络爬虫开发的首选语言。
用于发送 HTTP 请求。它允许我们向服务器发送 GET 或 POST 请求,并接收包含状态码、编码、响应内容的对象。
用于解析 HTML 和 XML 文档。它提供导航、搜索和修改解析树的方法,是提取网页数据的核心工具。
用于数据操作和分析。其核心数据结构 DataFrame 非常适合存储表格型数据,并能直接导出为 CSV、Excel 等格式。
用于在循环中显示进度条,提升用户体验,特别是在处理大量数据抓取任务时。
本案例演示如何使用 Python 抓取示例网站的商品列表信息,包括产品名称、原价、折扣价等。
首先安装必要的依赖库:
pip install requests beautifulsoup4 pandas tqdm
我们需要构造一个合法的请求头,避免被服务器识别为机器人而拦截。
import requests
url = 'https://www.example.com/products/mobiles'
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36'
}
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
response.encoding = response.apparent_encoding
print(f"请求成功,状态码:{response.status_code}")
except Exception as e:
print(f"请求失败:{e}")
使用 BeautifulSoup 解析返回的 HTML 内容,查找包含商品信息的容器。
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
# 假设商品列表在一个特定的 section 下
section_list = soup.find_all('div', class_='product-desc-rating')
遍历每个商品项,提取名称、链接和价格信息。注意处理可能缺失的数据。
import pandas as pd
from tqdm import tqdm
products = []
prices = []
discounts = []
for item in tqdm(section_list):
try:
# 提取产品名称
name_tag = item.find('p')
product_name = name_tag.text.strip() if name_tag else "未知"
# 提取链接
link_tag = item.find('a')
product_url = link_tag['href'] if link_tag else "#"
# 提取价格
price_span = item.find('span')
original_price = price_span.text.strip() if price_span else "0"
# 提取折扣信息
discount_div = item.find('div', class_='product-discount')
discount_info = discount_div.text.strip() if discount_div else "无折扣"
products.append(product_name)
prices.append(original_price)
discounts.append(discount_info)
except Exception as e:
continue
将提取的数据整理为 DataFrame 并保存为 CSV 文件。
df = pd.DataFrame({
'Product_Name': products,
'Original_Price': prices,
'Discount_Info': discounts
})
df.to_csv('mobile_products.csv', index=False, encoding='utf-8-sig')
print("数据已保存至 mobile_products.csv")
https://域名/robots.txt,确认是否允许抓取。time.sleep()。try-except 捕获异常。本文详细介绍了 Python 网络爬虫的基础原理、核心库的使用以及完整的实战流程。通过 Requests 发送请求,BeautifulSoup 解析数据,Pandas 存储结果,可以高效地完成数据采集任务。初学者应在此基础上进一步探索更复杂的反爬策略和数据清洗技术。

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