使用通义千问 API 实现非结构化数据提取与分析
1. 引言
在大数据时代,从海量非结构化数据(如网页 HTML、文本日志、PDF 文档等)中提取有价值的信息是一项常见但繁琐的任务。传统的正则表达式或 XPath 解析方法在面对复杂的页面结构变化时往往显得脆弱且维护成本高。
利用大语言模型(LLM)的语义理解能力,可以显著提升数据提取的准确性和灵活性。本文将以阿里云的通义千问 API 为例,详细介绍如何结合 Python 爬虫技术,构建一个智能的数据分析管道,将杂乱的 HTML 数据转化为结构化的 JSON 格式。
2. 准备工作
2.1 账号与密钥
在使用通义千问 API 之前,需要完成以下基础配置:
- 注册阿里云账号:访问阿里云官网并完成实名认证。
- 开通服务:在阿里云控制台搜索"DashScope"或"灵积模型服务",开通相关服务。
- 创建 API Key:进入 API-KEY 管理页面,创建一个 Access Key ID 和 Access Key Secret。请妥善保管,不要将其硬编码在代码中提交到公共仓库。
2.2 环境依赖
本项目基于 Python 开发。首先需要安装 DashScope SDK 库。
pip install dashscope
同时,为了处理 HTTP 请求和 JSON 数据,通常还需要确保系统已安装 requests 库(虽然 DashScope SDK 内部已封装,但在某些自定义场景下可能需要)。
3. 核心实现流程
3.1 数据获取
假设我们已经通过爬虫获取了目标网页的 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>
"""
3.2 Prompt 工程
为了让 LLM 输出符合预期的结构化数据,Prompt 的设计至关重要。我们需要明确指定输出格式(JSON)、字段定义以及约束条件。
prompt = f"""
以下是包含电影信息的 HTML 片段:
{html_data}
请执行以下任务:
1. 识别并提取电影名(name)、封面链接(picture)、简介(info)、评分(score)、评论人数(commentsNumber)。
2. 如果某个字段无法识别,请设为 null。
3. 仅返回一个标准的 JSON 数组,不要包含 markdown 标记或其他解释性文字。
4. 属性名必须严格使用英文小写。
"""
3.3 调用 API
使用 dashscope.Generation.call 方法发起请求。注意设置正确的模型名称和参数。
import dashscope
import json
from dashscope import Generation
def call_qwen_with_prompt(prompt, api_key):
dashscope.api_key = api_key
messages = [{
: ,
: prompt
}]
:
response = Generation.call(
model=dashscope.Generation.Models.qwen_turbo,
messages=messages,
result_format=
)
response.status_code == :
content = response.output.choices[].message.content
content
:
()
Exception e:
()


