
昨晚改脚本到三点,翻硬盘翻到之前写的抓短剧热词的小工具,刚好有人问我怎么不用付费API就能做热词统计,干脆把步骤记下来。
先把依赖装对
我这边用的是Python3.10,之前试过更高版本装lxml卡了好久,退回来就顺了,别追最新版本,能用就行。首先装需要的Python库:
pip install requests beautifulsoup4 ollama lxml
然后去ollama官网下个客户端,装完拉个轻量的开源模型就行,普通笔记本别上来就选大参数量的,跑着累,我自己用的是qwen2:1.5b,命令行敲这行等它拉完:
ollama run qwen2:1.5b
模型拉完会自动进对话界面,直接输/exit退出来就行,后台服务会自己挂着。
核心代码没几行
逻辑特别简单,说白了就是先抓公开的短剧榜单页标题,再丢给本地运行的大模型提炼核心题材关键词,最后存成csv表格就行,不用搭数据库,不用搞复杂框架。
import requests
from bs4 import BeautifulSoup
import csv
import time
import ollama
# 记得换成自己浏览器的UA,不然容易被拦截
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
# 这里换成你要抓的公开榜单地址
res = requests.get("目标榜单页URL", headers=headers, timeout=10)
soup = BeautifulSoup(res.text, "lxml")
# CSS选择器自己按页面结构改,F12选元素右键就能复制
title_list = [i.text.strip() for i in soup.select(".榜单标题对应的选择器")]
def extract_keyword(text):
resp = ollama.chat(
model="qwen2:1.5b",
messages=[{"role":"user","content":f"提取以下短剧标题里的核心题材关键词,输出3个以内,不要多余内容:{text}"}]
)
return resp["message"]["content"]
# 结果存到csv
with open("drama_keywords.csv", "w", encoding="utf-8-sig", newline="") as f:
writer = csv.writer(f)
writer.writerow(["短剧标题", "核心关键词"])
for title in title_list:
time.sleep(2) # 请求间隔留几秒,别太猛
writer.writerow([title, extract_keyword(title)])
提醒一句:只抓公开可访问的榜单内容就行,别碰需要登录、有反爬强校验的页面,请求间隔留够,我之前没加延时,IP被封了好一阵,不值当。
几个踩过的小坑
- 选模型别贪大,1.5B参数量的做关键词提炼完全够用,这个我还没细测准确率,反正自己找选题筛方向足够,更大的模型响应速度看设备,普通本扛着费劲
- 代码里的CSS选择器别直接抄我的,每个网站页面结构都不一样,自己F12定位最稳
- 要是碰到动态渲染的页面(就是源码里看不到标题内容的那种),把requests换成playwright就行,核心逻辑不用动,多装个包的事
哦对,跑的时候要是报依赖错,先检查Python版本是不是在3.9-3.11区间,别一上来就搜半天攻略,大部分问题都是版本不兼容闹的。自己找选题用用得了,别拿去搞批量爬取商用哈。
评论一下?