You need to enable JavaScript to run this app. 如何使用tweepy在Twitter实现正则匹配搜索抓取含$前缀的推文
优惠活动
大模型
产品
解决方案
定价
更多

如何使用tweepy在Twitter实现正则匹配搜索抓取含$前缀的推文

基于Tweepy实现全量带$前缀财经标签(Cashtag)的推文采集

现有代码的核心问题

原代码固定检索单条财经标签,且存在三处明显逻辑缺陷:

  • 无效嵌套循环:遍历tweet的JSON字段键名,会将同一条推文重复写入采集列表
  • 检索范围局限:无法覆盖任意$开头的财经标签内容
  • 文本截断风险:默认返回的短文本会丢失长推文中的标签信息

具体实现方案

Twitter搜索接口本身不支持直接传入正则匹配全量Cashtag,采用接口粗搜缩小范围 + 本地正则精筛过滤的两层逻辑即可适配需求,无需修改原有认证、速率限制的配置:

  1. 调整搜索查询词
    不再固定搜索单个$telsa标签,将查询条件设为$ lang:en,直接让接口返回所有英文文本中带$符号的推文,把检索范围从全量英文推文压缩到带$符号的子集,大幅降低无效请求量。
  2. 配置正则匹配规则
    结合真实财经Cashtag的格式($后接连续英文字母,排除文本中表示价格的$+数字类内容),编写通用正则表达式匹配全量符合要求的标签,避免噪音数据混入。
  3. 修正原有循环逻辑
    去掉原代码中遍历tweet字段的无效循环,单条推文直接完成校验、字段提取、入列表的流程,同时开启长文本模式保证获取完整推文内容。

修正后的可运行代码

import re
import tweepy
import json

# 原有auth初始化逻辑保持不变
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
data = []

# 通用Cashtag匹配规则:$后接连续英文字母,排除$5、$10这类价格表述
cashtag_re = re.compile(r'\$[A-Za-z]+')
# 搜索条件:匹配所有带$的英文推文
search_query = "$ lang:en"

# 采集流程
for tweet in api.search(q=search_query, count=100, tweet_mode="extended"):
    tweet_info = tweet._json
    # 提取完整长文本,避免截断导致的标签漏检
    full_text = tweet_info.get("full_text", tweet_info["text"])
    # 本地正则校验,仅保留存在合法Cashtag的推文
    if cashtag_re.search(full_text):
        data.append({
            "username": tweet_info["user"]["name"],
            "text": full_text,
            "created_at": tweet_info["created_at"],
            "place": tweet_info["place"]
        })

print(json.dumps(data, indent=4, sort_keys=True))

可优化的细节

  • 正则规则可按需调整:如果需要兼容带数字的衍生品类标签(如$TSLA240101),可将正则改为r'\$[A-Za-z0-9]+'
  • 分页采集:如果需要拉取更多历史推文,可替换为tweepy.Cursor实现自动翻页,无需手动处理接口返回的分页游标
  • 标签提取:如果需要在采集结果中附带每条推文中匹配到的具体$标签列表,可调用cashtag_re.findall(full_text)提取匹配结果,存入采集字典即可

内容的提问来源于stack exchange,提问作者Kiran S youtube channel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 03:45:05