Python数据抓取核心是稳定提取结构化字段,关键在精准定位、容错解析、清洗归一三步:先人工分析页面结构并记录选择器路径;再用requests+BeautifulSoup配合异常处理与headers模拟抓取;最后对动态内容选API或渲染方案,并清洗时间、数值等字段为标准格式。

Python数据抓取的核心不是“写完代码就完事”,而是从目标页面稳定提取出结构化字段。关键在三步:精准定位、容错解析、清洗归一。
明确目标字段与页面结构
别急着写代码,先人工打开目标网页(如商品列表页、新闻详情页),右键“查看网页源码”或用浏览器开发者工具(F12)定位你要的字段——标题在哪层
.product-title或//h1[@class="title"]。这一步决定后续解析是否可靠。
用requests+BeautifulSoup做基础抓取与抽取
适合静态HTML页面。requests负责拿源码,BeautifulSoup负责解析。注意设置headers模拟真实浏览器,避免被反爬返回空页;对关键字段用.select_one()或.find()并加异常判断,而不是直接链式调用导致报错中断:
- 用
response.raise_for_status()检查HTTP状态 - 标题字段存在但可能为空时,写成
title_elem = soup.select_one('h1'); title = title_elem.get_text(strip=True) if title_elem else "" - 价格含符号或逗号(如“¥2,999.00”),抽取后立刻用正则
re.sub(r'[^\d.]', '', price_text)转为纯数字字符串
应对动态加载与简单反爬
如果目标字段在Ajax请求返回的JSON里,或页面靠JavaScript渲染(比如滚动加载更多),优先找XHR接口,用requests直接调用API,比启动浏览器更轻量。若必须渲染JS,可用Selenium或Playwright,但只在必要时启用——启动浏览器慢、资源占用高、容易被检测。常见做法是:先尝试抓接口,失败再降级到渲染方案,并加随机延时和User-Agent轮换。
立即学习“Python免费学习笔记(深入)”;
字段清洗与结构化输出
原始抽取的文本常带多余空格、换行、广告语、单位等。按字段类型分别处理:
- 时间字段:用
dateutil.parser.parse()兼容“2024-03-15”“昨天”“3小时前”等多种格式 - 数值字段:统一转为float或int,空值/异常值设为None或NaN
- 多值字段(如标签列表):用
[t.strip() for t in tag_elems if t.strip()]去空去重 - 最终存为CSV或JSON时,确保所有字段长度一致、编码为UTF-8,避免Excel乱码
不复杂但容易忽略:每次改一个选择器,都该用小样本(10页内)验证抽取结果是否全量准确,再批量跑。字段解析稳了,抓取才真正落地。










