问答

写论文需要社媒数据,学生大概要准备多少预算?

简短回答

比多数同学想的少。一份常见的论文语料,5000 条微博加 2 万条 B站评论,在 okdata 上是 $3.00:微博搜索每次 $0.002、约 10 条,B站评论每次 $0.002、约 20 条。先用新 key 自带的试用额度做小样本,再按正式采集加一次补采来做预算。

研究网络舆论的论文,一般需要几千条帖子,再加 1 万到 5 万条评论。按页计费的话,这在课题经费里是很小的一笔,往往比旁边的问卷或转录费用还低。

三四种常见设计

研究设计 接口 调用次数 费用
某话题 5000 条微博 微博搜索 500 $1.00
100 条 B站视频下的 2 万条评论 B站视频评论 1000 $2.00
1 万条抖音评论 抖音视频评论 500 $1.00
跨平台对比章节再加 1 万条 TikTok 评论 TikTok 视频评论 200 $0.40

预算建议分三段:小样本试采、正式采集、再留一次补采,以防导师让你加关键词或者延长时间段。每个新 key 自带 $0.10 试用额度,够在便宜的接口上跑一个小样本,先确认数据能不能回答你的研究问题。

自带记录的采集脚本

import csv, os, requests

URL = "https://api.okdata.online/v1/weibo/posts/search"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

def collect(query, pages, path):
    cursor = None
    with open(path, "w", newline="", encoding="utf-8") as f:
        w = csv.writer(f)
        w.writerow(["id", "published_at", "text", "likes", "reposts", "comments", "fetched_at"])
        for _ in range(pages):
            params = {"query": query, "sort": "latest", **({"cursor": cursor} if cursor else {})}
            body = requests.get(URL, headers=H, params=params, timeout=60).json()
            if body["code"] != "ok":
                raise RuntimeError(f"{body['code']}: {body['message']}")
            for p in body["data"]["items"]:
                m = p["metrics"]
                w.writerow([p["id"], p["published_at"], p["text"], m["likes"], m["reposts"], m["comments"], body["meta"]["fetched_at"]])
            if not body["page"]["has_more"]:
                break
            cursor = body["page"]["next_cursor"]

方法部分要写清楚的

  • 记下具体的检索词、排序方式、采集日期,以及每一页的 fetched_at 时间。平台搜索结果会变,采集时间本身就是数据的一部分。
  • 说明只纳入了采集时公开可见的内容,已删除或设为私密的内容不在样本里。
  • 分析前删除或哈希处理用户名,原始文件妥善保存;学校要求伦理审查的,提前申请。公开帖子里同样有个人信息。

更便宜或更正式的路

如果你所在的学校符合条件,TikTok 的 Research API 申请并通过项目审核后免费,只做 TikTok 的论文用它更有说服力。现成的公开数据集不花钱,值得先找一找。开源爬虫也免费,前提是你有时间一直维护它。从评论里归纳主题的做法,可以参考口碑研究。

更新于