SmallThinker-3B-Preview入门指南Python爬虫数据清洗与智能分析你是不是也经常遇到这种情况辛辛苦苦爬下来一堆数据结果发现里面什么都有——乱七八糟的HTML标签、重复的广告文案、不规范的日期格式、还有一堆无意义的符号。光是清理这些数据就要花掉大半天时间真正想做的分析反而没空做了。今天要跟你分享的就是怎么用SmallThinker-3B-Preview这个轻量级模型把我们从繁琐的数据清洗里解放出来。它就像一个智能助手能帮你自动识别和整理爬虫抓回来的那些杂乱文本提取出真正有用的信息甚至还能帮你生成初步的分析报告。整个过程其实很简单不需要你懂多深的模型原理会用Python调用API就行。接下来我就手把手带你走一遍完整的流程。1. 环境准备与快速上手在开始之前我们先花几分钟把环境搭好。整个过程非常快基本上就是安装几个Python库。1.1 安装必要的库打开你的命令行工具执行下面这行命令。如果你习惯用虚拟环境记得先激活它。pip install requests pandas openai简单解释一下这几个库是干什么的requests用来发送HTTP请求和模型的API“对话”。pandas处理表格数据的老朋友了清洗完的数据用它来整理特别方便。openai这里我们主要用它的格式来组织请求SmallThinker的API调用方式和它很像学起来很快。1.2 获取并设置API密钥要调用模型你需要一个通行证也就是API密钥。这个密钥通常在你注册或申请使用模型的平台那里获取。拿到密钥后别把它直接写在代码里。最好的做法是把它设置成环境变量。在Linux或Mac的终端里可以这样设置export SMALLTHINKER_API_KEY你的实际密钥在Windows的命令提示符里则是set SMALLTHINKER_API_KEY你的实际密钥在Python代码里我们可以这样安全地读取它import os api_key os.environ.get(SMALLTHINKER_API_KEY) if not api_key: print(请先设置环境变量 SMALLTHINKER_API_KEY) # 这里可以退出程序或提示用户好了准备工作完成接下来我们看看怎么用这个模型来处理真实的数据。2. 从杂乱文本到干净数据智能清洗实战假设我们爬取了一些电商商品页面原始数据是一团糟的混合体。我们一步步来看模型能帮我们做什么。2.1 基础文本清洗与规整我们先从最简单的任务开始让模型帮我们去掉无用的噪音把文本整理得像个样子。import requests import json def clean_raw_text_with_llm(raw_text, api_key, base_urlhttps://api.smallthinker.example/v1): 使用SmallThinker模型清洗原始爬虫文本。 参数: raw_text: 爬取到的原始杂乱文本 api_key: 你的API密钥 base_url: 模型API的基础地址请替换为实际地址 返回: 清洗后的干净文本 headers { Authorization: fBearer {api_key}, Content-Type: application/json } # 构建一个明确的指令告诉模型我们要做什么 prompt f 请对以下爬虫获取的原始文本进行清洗和规整 1. 移除所有HTML标签、脚本代码和样式代码。 2. 将多个连续的空格、换行符压缩为合理的单个空格或换行。 3. 移除常见的广告语、导航栏重复文本如“首页|登录|注册”。 4. 保留核心的商品描述、规格参数和用户评价正文。 原始文本 {raw_text} 请直接输出清洗后的结果。 data { model: smallthinker-3b-preview, messages: [ {role: user, content: prompt} ], max_tokens: 1500, temperature: 0.1 # 温度设低一点让输出更稳定、更专注于执行指令 } try: response requests.post(f{base_url}/chat/completions, headersheaders, datajson.dumps(data)) response.raise_for_status() # 如果请求失败抛出异常 result response.json() cleaned_text result[choices][0][message][content] return cleaned_text except requests.exceptions.RequestException as e: print(fAPI请求出错: {e}) return None except KeyError as e: print(f解析API响应时出错未找到预期字段: {e}) return None # 模拟一段爬取到的脏数据 dirty_html_snippet div class\product\ id\item123\ scripttrackPageView();/script h1【限时特价】高端智能手机 - 旗舰款/h1 p价格span class\price\¥3999/span/p brbr div class\ad\立即下载APP领取百元券/div 产品描述这款手机采用最新处理器续航时间长拍照效果出色。 ulli内存8GB/lili存储256GB/li/ul 首页 | 热门推荐 | 购物车 | 我的账户 用户评价很好用运行流畅。用户评价电池耐用。 /div # 调用函数进行清洗 api_key os.environ.get(SMALLTHINKER_API_KEY) cleaned_result clean_raw_text_with_llm(dirty_html_snippet, api_key) if cleaned_result: print(清洗后的文本) print(cleaned_result)运行这段代码模型会帮你把div、script这些标签统统去掉压缩多余的空格还顺手把“首页 | 热门推荐”那行导航栏文本给删了最后留下干净的商品信息和评价。你可以自己试试看效果挺直观的。2.2 关键信息提取与结构化文本干净了但如果我们想把它变成表格里的一行数据比如商品名称、价格、规格该怎么办手动提取还是麻烦。这时候可以让模型直接按我们想要的格式输出。def extract_structured_info(text, api_key, base_urlhttps://api.smallthinker.example/v1): 从清洗后的文本中提取关键信息并结构化为JSON格式。 headers { Authorization: fBearer {api_key}, Content-Type: application/json } prompt f 请从以下商品描述文本中提取关键信息并严格按照JSON格式输出。 所需字段包括 - product_name (商品名称字符串) - price (价格整数仅提取数字) - key_features (核心卖点字符串列表) - memory (内存字符串如“8GB”) - storage (存储字符串如“256GB”) - user_rating_sentiment (用户评价情感字符串可选值“正面”、“中性”、“负面”) 文本内容 {text} 注意只输出一个合法的JSON对象不要有任何其他解释文字。 data { model: smallthinker-3b-preview, messages: [ {role: user, content: prompt} ], max_tokens: 500, temperature: 0.1, response_format: {type: json_object} # 强烈要求返回JSON格式 } try: response requests.post(f{base_url}/chat/completions, headersheaders, datajson.dumps(data)) response.raise_for_status() result response.json() json_str result[choices][0][message][content] # 尝试解析JSON structured_data json.loads(json_str) return structured_data except json.JSONDecodeError as e: print(f解析模型返回的JSON时出错: {e}) print(f原始返回内容: {json_str}) return None except Exception as e: print(f处理过程中出错: {e}) return None # 使用上一节清洗后的文本这里用模拟结果 cleaned_text_example 高端智能手机 - 旗舰款 价格¥3999 产品描述这款手机采用最新处理器续航时间长拍照效果出色。 内存8GB 存储256GB 用户评价很好用运行流畅。电池耐用。 extracted_info extract_structured_info(cleaned_text_example, api_key) if extracted_info: print(\n提取出的结构化信息) print(json.dumps(extracted_info, indent2, ensure_asciiFalse))这个函数会返回一个字典就像下面这样直接就能塞进Pandas的DataFrame里{ product_name: 高端智能手机 - 旗舰款, price: 3999, key_features: [最新处理器, 续航时间长, 拍照效果出色], memory: 8GB, storage: 256GB, user_rating_sentiment: 正面 }3. 批量处理与数据分析报告生成单个商品处理好了但爬虫数据往往是成百上千条。别担心我们可以用个循环批量处理最后还能让模型帮我们总结一下。3.1 构建自动化清洗流水线我们来写一个函数模拟处理一个包含多条脏数据的列表。import pandas as pd from time import sleep def batch_process_crawled_data(raw_data_list, api_key, delay1.0): 批量处理爬取的原始数据列表。 参数: raw_data_list: 原始文本字符串的列表 api_key: API密钥 delay: 每次API调用后的延迟秒避免请求过快 返回: 一个Pandas DataFrame包含所有清洗和提取后的结构化数据 all_results [] for i, raw_data in enumerate(raw_data_list): print(f正在处理第 {i1}/{len(raw_data_list)} 条数据...) # 步骤1: 清洗文本 cleaned clean_raw_text_with_llm(raw_data, api_key) if not cleaned: print(f 第 {i1} 条数据清洗失败跳过。) continue # 步骤2: 提取结构化信息 structured extract_structured_info(cleaned, api_key) if structured: all_results.append(structured) else: print(f 第 {i1} 条数据信息提取失败跳过。) # 礼貌性延迟避免对API服务器造成压力 sleep(delay) # 将所有结果转换为DataFrame if all_results: df pd.DataFrame(all_results) return df else: return pd.DataFrame() # 返回空DataFrame # 模拟一个批量数据 sample_batch [ dirty_html_snippet, # 我们之前用的例子 html新品笔记本电脑price¥6999/price配置i7芯片16G内存1TB SSD。 评价设计轻薄性能足够办公。/html , # 你可以继续添加更多模拟数据... ] # 执行批量处理 df_results batch_process_crawled_data(sample_batch, api_key, delay1.5) if not df_results.empty: print(\n批量处理完成数据概览) print(df_results.head()) # 可以保存到CSV # df_results.to_csv(cleaned_products.csv, indexFalse, encodingutf-8-sig)3.2 生成初步数据分析洞察数据都整理成表格了我们最后让模型看一眼快速给我们一些观察结论。def generate_data_insights(df, api_key, base_urlhttps://api.smallthinker.example/v1): 基于清洗后的DataFrame生成简短的数据分析洞察报告。 if df.empty: return 数据为空无法生成分析。 # 将DataFrame转换为易于阅读的文本摘要 data_summary f 本次共分析 {len(df)} 条商品数据。 价格统计平均价约为 {df[price].mean():.0f} 元最低 {df[price].min()} 元最高 {df[price].max()} 元。 情感分布正面评价占比 {(df[user_rating_sentiment] 正面).mean()*100:.1f}%。 前几个商品名称示例{, .join(df[product_name].head(3).tolist())} headers { Authorization: fBearer {api_key}, Content-Type: application/json } prompt f 你是一位数据分析助手。请基于以下数据摘要生成一段简短、易懂的洞察报告约150-200字。 报告内容可以包括对价格区间的观察、用户反馈的整体情况、以及从商品名称或特征中发现的任何有趣模式。 请用口语化的段落输出不要用项目符号列表。 数据摘要 {data_summary} data { model: smallthinker-3b-preview, messages: [ {role: user, content: prompt} ], max_tokens: 400, temperature: 0.7 # 温度稍高让分析更有“见解”一些 } try: response requests.post(f{base_url}/chat/completions, headersheaders, datajson.dumps(data)) response.raise_for_status() result response.json() insights result[choices][0][message][content] return insights except Exception as e: print(f生成洞察时出错: {e}) return None # 生成报告 insights_report generate_data_insights(df_results, api_key) if insights_report: print(\n 数据洞察报告 \n) print(insights_report)模型可能会给你一段这样的总结“从这批次商品来看价格主要集中在4000-7000元的中高端区间。用户评价普遍比较积极正面反馈占比很高。商品名称里‘旗舰’、‘新品’这类词汇出现频繁可能暗示商家主打高端和新鲜感。需要注意的是数据样本还比较少这个观察仅供参考。”4. 实用技巧与注意事项走完了整个流程这里有几个我实践下来的小经验能帮你用得更顺手。第一指令要具体明确。模型很听话但你需要告诉它具体怎么做。比如与其说“清理文本”不如说“移除HTML标签压缩多余空格保留第三段和第五段的核心内容”。指令越详细结果越靠谱。第二用好“温度”这个参数。在清洗和提取信息时把temperature设低比如0.1这样模型的输出稳定每次结果都差不多。在生成分析报告或创意内容时可以调高一点比如0.7让它更有想法。第三一定要做后处理校验。模型虽然强但也不是百分百准确。特别是提取价格数字、分类情感时拿到结果后最好加一段简单的校验代码。比如检查价格是不是真的数字或者情感分类是不是我们允许的“正面”、“中性”、“负面”中的一个。第四处理大量数据时要“慢一点”。批量调用API时记得在请求之间加个sleep延迟一秒左右就行。这既是对提供API的服务器的礼貌也能避免因为请求太快导致一些意外的错误。最后从简单任务开始。如果你第一次用可以先拿几十条数据跑一遍整个流程。看看清洗得干不干净提取的信息准不准。跑通了心里有底了再慢慢增加数据量尝试更复杂的提取规则。5. 总结整体试下来用SmallThinker-3B-Preview来处理爬虫数据确实能省不少力气。它特别擅长理解你那段杂乱文本里“什么是噪音”、“什么是宝贝”然后按你的要求把“宝贝”规规矩矩地整理出来。对于经常要爬取大量非结构化文本又不想在数据清洗上花太多时间的朋友来说这是个很实用的工具。它不一定能解决所有问题比如特别复杂的、格式千奇百怪的文本可能还是需要一些定制化的规则来配合。但对于大多数常见的网页内容比如新闻、商品描述、论坛帖子用它来打第一遍“粗洗”效率提升是非常明显的。你不妨也找一些自己手头的爬虫数据试试看从最简单的清洗任务开始体验一下这个智能助手的效率。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。