使用通义千问 API 实现非结构化数据提取与分析
本文详细介绍了如何使用阿里云通义千问 API 结合 Python 进行非结构化数据的提取与分析。内容涵盖账号注册、API Key 获取、环境配置、Prompt 工程设计、核心代码实现及错误处理机制。通过具体示例展示了如何将 HTML 网页数据转换为结构化 JSON 格式,并提供了关于密钥安全、Token 优化及并发处理的行业最佳实践,旨在帮助开发者构建高效、稳定的 AI 驱动数据管道。

本文详细介绍了如何使用阿里云通义千问 API 结合 Python 进行非结构化数据的提取与分析。内容涵盖账号注册、API Key 获取、环境配置、Prompt 工程设计、核心代码实现及错误处理机制。通过具体示例展示了如何将 HTML 网页数据转换为结构化 JSON 格式,并提供了关于密钥安全、Token 优化及并发处理的行业最佳实践,旨在帮助开发者构建高效、稳定的 AI 驱动数据管道。

在大数据时代,从海量非结构化数据(如网页 HTML、文本日志、PDF 文档等)中提取有价值的信息是一项常见但繁琐的任务。传统的正则表达式或 XPath 解析方法在面对复杂的页面结构变化时往往显得脆弱且维护成本高。
利用大语言模型(LLM)的语义理解能力,可以显著提升数据提取的准确性和灵活性。本文将以阿里云的通义千问 API 为例,详细介绍如何结合 Python 爬虫技术,构建一个智能的数据分析管道,将杂乱的 HTML 数据转化为结构化的 JSON 格式。
在使用通义千问 API 之前,需要完成以下基础配置:
本项目基于 Python 开发。首先需要安装 DashScope SDK 库。
pip install dashscope
同时,为了处理 HTTP 请求和 JSON 数据,通常还需要确保系统已安装 requests 库(虽然 DashScope SDK 内部已封装,但在某些自定义场景下可能需要)。
假设我们已经通过爬虫获取了目标网页的 HTML 内容。在实际场景中,这部分可能来自 BeautifulSoup 解析后的文本,或者原始 HTML 字符串。
# 模拟爬取到的 HTML 数据片段
html_data = """
<div class="movie-item">
<h3>电影名称示例</h3>
<img src="https://example.com/pic.jpg" />
<p>这是一部精彩的电影简介...</p>
<span class="score">8.5</span>
<span class="comments">10000 人评论</span>
</div>
"""
为了让 LLM 输出符合预期的结构化数据,Prompt 的设计至关重要。我们需要明确指定输出格式(JSON)、字段定义以及约束条件。
prompt = f"""
以下是包含电影信息的 HTML 片段:
{html_data}
请执行以下任务:
1. 识别并提取电影名(name)、封面链接(picture)、简介(info)、评分(score)、评论人数(commentsNumber)。
2. 如果某个字段无法识别,请设为 null。
3. 仅返回一个标准的 JSON 数组,不要包含 markdown 标记或其他解释性文字。
4. 属性名必须严格使用英文小写。
"""
使用 dashscope.Generation.call 方法发起请求。注意设置正确的模型名称和参数。
import dashscope
import json
from dashscope import Generation
def call_qwen_with_prompt(prompt, api_key):
# 设置 API Key
dashscope.api_key = api_key
# 构建消息列表
messages = [{
'role': 'user',
'content': prompt
}]
try:
# 调用通义千问模型
response = Generation.call(
model=dashscope.Generation.Models.qwen_turbo,
messages=messages,
result_format='message' # 指定返回格式
)
if response.status_code == 200:
content = response.output.choices[0].message.content
return content
else:
print(f"API 调用失败:{response.code} - {response.message}")
return None
except Exception as e:
print(f"发生异常:{str(e)}")
return None
由于 LLM 可能会偶尔输出 Markdown 代码块标记(如 json ... ),在解析前需要进行清洗。同时,必须验证 JSON 的合法性。
def parse_llm_response(response_text):
if not response_text:
return []
# 清理可能的 markdown 标记
cleaned_text = response_text.strip()
if cleaned_text.startswith("```json") or cleaned_text.startswith("```"):
cleaned_text = cleaned_text.split("\n", 1)[-1].rsplit("```", 1)[0].strip()
try:
data = json.loads(cleaned_text)
# 简单的数据校验逻辑
if isinstance(data, list):
return data
elif isinstance(data, dict):
return [data]
else:
return []
except json.JSONDecodeError as e:
print(f"JSON 解析错误:{e}")
return []
将上述步骤整合为一个完整的可运行脚本。
import dashscope
import json
import os
from dotenv import load_dotenv
# 加载环境变量中的 API_KEY,避免硬编码
load_dotenv()
API_KEY = os.getenv("DASHSCOPE_API_KEY")
if not API_KEY:
raise ValueError("请在 .env 文件中配置 DASHSCOPE_API_KEY")
dashscope.api_key = API_KEY
def extract_data_from_html(html_content):
prompt = f"""
你是一个数据分析助手。请从以下 HTML 内容中提取结构化数据。
目标字段:name (string), picture (string), info (string), score (float), commentsNumber (int)。
输出格式:JSON Array。
HTML Content:
{html_content}
"""
messages = [{'role': 'user', 'content': prompt}]
try:
response = Generation.call(
model=dashscope.Generation.Models.qwen_turbo,
messages=messages,
result_format='message'
)
if response.status_code == 200:
raw_output = response.output.choices[0].message.content
return clean_and_parse_json(raw_output)
else:
print(f"Error: {response.code}, {response.message}")
return None
except Exception as e:
print(f"Exception occurred: {e}")
return None
def clean_and_parse_json(text):
text = text.strip()
text.startswith():
text = text.replace(, ).replace(, ).strip()
text.startswith():
text = text.replace(, ).strip()
:
json.loads(text)
json.JSONDecodeError:
[]
__name__ == :
sample_html =
result = extract_data_from_html(sample_html)
(json.dumps(result, ensure_ascii=, indent=))
.env 文件配合 python-dotenv)或云平台的密钥管理服务。asyncio 或线程池并发调用 API,但需注意 API 的 QPS(每秒查询率)限制。通过集成通义千问 API,我们可以将传统的数据提取工作流升级为智能化的数据处理流程。这种方法不仅降低了对特定网页结构的依赖,还能处理更复杂的语义信息。在实际生产中,建议结合规则引擎与大模型能力,构建混合式的数据处理方案,以平衡准确性、成本与效率。
开发者应持续关注模型版本的更新,并根据实际业务需求调整 Prompt 策略,以获得最佳的提取效果。

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