Python 与大模型结合实现网页数据爬虫实战
本文介绍在 Google Colab 环境下,使用 Python 的 requests 和 BeautifulSoup 库抓取豆瓣电影数据,并结合阿里云 Dashscope 平台的 Qwen Turbo 大模型进行非结构化数据的智能提取。内容涵盖环境配置、爬虫逻辑编写、API 调用及提示词工程,同时对比了 Python 与 JavaScript 在爬虫开发中的差异,提供了完整的代码示例与最佳实践建议。

本文介绍在 Google Colab 环境下,使用 Python 的 requests 和 BeautifulSoup 库抓取豆瓣电影数据,并结合阿里云 Dashscope 平台的 Qwen Turbo 大模型进行非结构化数据的智能提取。内容涵盖环境配置、爬虫逻辑编写、API 调用及提示词工程,同时对比了 Python 与 JavaScript 在爬虫开发中的差异,提供了完整的代码示例与最佳实践建议。

在数字化时代,数据挖掘与分析能力已成为开发者的重要技能。传统的网络爬虫主要依赖规则匹配(如正则表达式或 CSS 选择器)来提取结构化数据,但在面对非结构化或半结构化的 HTML 内容时,往往需要复杂的解析逻辑。随着大语言模型(LLM)技术的发展,我们可以利用其强大的语义理解能力,将爬取的原始 HTML 直接转化为结构化的 JSON 数据,从而简化数据处理流程。
本文旨在介绍如何在 Google Colab 云端环境中,使用 Python 编写爬虫脚本抓取豆瓣电影数据,并结合阿里云 Dashscope 平台上的 Qwen Turbo 模型进行高级信息提取。我们将展示从环境配置、数据获取、HTML 解析到智能分析的全过程,同时对比 Python 与 JavaScript 在爬虫开发中的差异,提供一套完整的工程化实践方案。
Google Colab 是一个免费的云端 Jupyter Notebook 平台,无需配置本地 Python 环境即可运行代码,特别适合快速原型开发和机器学习实验。
我们需要三个主要库:requests 用于发送 HTTP 请求,beautifulsoup4 用于解析 HTML,dashscope 用于调用阿里云大模型 API。
!pip install requests
!pip install beautifulsoup4
!pip install dashscope
执行上述命令后,等待安装完成提示。
import requests
from bs4 import BeautifulSoup
import dashscope
from dashscope import Generation
import json
import time
为了模拟浏览器行为并避免被目标网站拦截,必须设置 User-Agent 请求头。可以通过浏览器的开发者工具查看当前浏览器的 User-Agent 字符串。
def fetch_movie_list(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
}
try:
response = requests.get(url, headers=headers, timeout=10)
if response.status_code == 200:
return response.text
else:
print(f"Failed to retrieve content: Status Code {response.status_code}")
return None
except Exception as e:
print(f"Request error: {e}")
return None
url = 'https://movie.douban.com/chart'
movies_html = fetch_movie_list(url)
使用 BeautifulSoup 解析返回的 HTML 文本。豆瓣电影榜单页面的结构相对固定,我们可以使用 CSS 选择器定位电影条目。
if movies_html:
soup = BeautifulSoup(movies_html, 'html.parser')
# 定位电影列表容器
movie_items = soup.select('#wrapper #content .article .item')
# 仅提取前两部电影作为示例
target_movies = movie_items[:2]
all_movies_text = ''.join([movie.prettify() for movie in target_movies])
print("Extracted HTML Preview:")
print(all_movies_text[:500])
else:
print("No data retrieved.")
为了让大模型准确提取信息,我们需要设计清晰的 Prompt。Prompt 应包含原始数据、任务描述以及输出格式要求。
prompt = f"""
以下是豆瓣电影页面的部分 HTML 内容:
{all_movies_text}
请从中提取以下字段:
- name: 电影名称
- picture: 封面图片链接
- info: 剧情简介
- score: 评分
- commentsNumber: 评论人数
要求:
1. 只提取前两部电影的完整信息。
2. 属性名必须使用括号内的英文单词。
3. 以标准的 JSON 数组格式返回,不要包含 Markdown 标记。
"""
print(prompt)
集成阿里云 Dashscope SDK,配置 API Key 并发起对话请求。注意在实际生产中,API Key 不应硬编码在代码中,建议使用环境变量管理。
# 替换为你的实际 API Key
# 建议通过 os.environ.get('DASHSCOPE_API_KEY') 获取
dashscope.api_key = 'sk-xxxxxxxxxxxxxxxxxxxxxx'
def call_qwen_with_prompt():
messages = [
{'role': 'user', 'content': prompt}
]
try:
response = Generation.call(
model=Generation.Models.qwen_turbo,
messages=messages,
result_format='message'
)
if response.status_code == 200:
content = response.output.choices[0].message.content
print("Model Response:")
print(content)
return content
else:
print(f"API Error: {response.code} - {response.message}")
return None
except Exception as e:
print(f"Exception occurred: {e}")
return None
llm_output = call_qwen_with_prompt()
大模型返回的内容可能包含 Markdown 代码块标记(如 ```json),需要清洗后才能解析为 Python 对象。
if llm_output:
import re
# 移除 markdown 标记
clean_json_str = re.sub(r'^```json\s*|\s*```$', '', llm_output.strip(), flags=re.MULTILINE)
try:
data = json.loads(clean_json_str)
print("Parsed Data:")
print(json.dumps(data, ensure_ascii=False, indent=2))
except json.JSONDecodeError as e:
print(f"JSON Parsing Error: {e}")
在 Web 爬虫开发领域,Python 和 Node.js (JavaScript) 是最常用的两种技术栈。以下是两者的详细对比:
asyncio 支持异步 IO,配合 aiohttp 可实现高性能爬虫。多线程/多进程也常用于绕过 GIL 限制。在爬取任何网站前,请务必检查 robots.txt 文件,确认是否允许爬取特定路径。尊重网站的反爬策略是开发者的基本素养。
避免在短时间内发送大量请求导致 IP 被封禁。建议在请求间添加随机延时。
import random
import time
time.sleep(random.uniform(1, 3))
网络请求具有不稳定性,应增加重试机制。可以使用 tenacity 库或自定义装饰器来实现自动重试。
提取的数据若涉及用户隐私,需严格遵守相关法律法规。不要在公开渠道传播敏感信息。
本文详细介绍了如何利用 Python 结合大模型技术实现智能化的网页数据爬虫。通过 Google Colab 快速搭建环境,使用 requests 和 BeautifulSoup 获取原始数据,再借助 Qwen Turbo 模型将非结构化 HTML 转化为结构化 JSON。相比传统爬虫,这种方法在处理复杂页面结构时更加灵活高效。同时,我们也对比了 Python 与 JavaScript 的技术差异,帮助读者根据项目需求选择合适的技术栈。掌握这一流程,将大大提升数据获取与处理的效率。
在未来的开发中,可以进一步探索 Selenium 或 Playwright 等无头浏览器方案来处理动态渲染页面,并结合 LangChain 框架构建更复杂的大模型应用工作流。

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