如何使用Python爬取乌尔都语等特定语言的Twitter推文
Python爬取乌尔都语Twitter推文的定向实现方法
乌尔都语的ISO 639-1标准语言代码为ur,Twitter搜索原生支持按该代码过滤内容,配合字符规则二次校验就能实现精准定向,以下是你提到的三种方案的具体实现方式:
方案1:Tweepy 调用官方API(稳定性最高,优先选择)
- 申请Twitter API v2权限后,直接在搜索查询语句中加入
lang:ur参数,官方会在返回结果前完成第一层过滤,效率远高于事后自行筛选。 - 参考实现:
import tweepy # 替换为自己申请的Bearer Token client = tweepy.Client(bearer_token="YOUR_OWN_BEARER_TOKEN") # 可根据需求叠加关键词、时间范围、排除转推等筛选条件 search_query = "目标关键词 lang:ur -is:retweet" result = client.search_recent_tweets( query=search_query, max_results=100, tweet_fields=["lang", "text", "created_at"] ) for tweet in result.data: # 二次校验,规避官方标注偶发的错误 if tweet.lang == "ur": # 后续做你的存储、处理逻辑 print(tweet.text)
- 注意:免费档API仅支持拉取最近7天的推文,需要历史全量数据需购买对应付费档位。
方案2:Twint 无密钥爬取(无需申请API权限)
- 原版Twint已停止维护,直接装PyPI旧版本会出现接口报错,需要使用社区维护的修复分支版本。
- Twint配置项原生支持语言过滤,直接将Lang参数设为
ur即可完成初筛,参考实现:
import twint config = twint.Config() config.Search = "目标关键词" config.Lang = "ur" config.Hide_output = True config.Store_object = True twint.run.Search(config) tweet_list = twint.output.tweets_list for tweet in tweet_list: # 乌尔都语Unicode区间校验兜底 urdu_char_cnt = 0 text = tweet.tweet for c in text: if '\u0600' <= c <= '\u06ff' or '\ufb50' <= c <= '\ufdff': urdu_char_cnt += 1 # 乌尔都语字符占比超过60%判定为有效内容,过滤混排、广告等无关内容 if len(text) > 0 and urdu_char_cnt / len(text) > 0.6: print(text)
- 注意:该方案通过模拟非官方接口请求实现,无稳定性保障,Twitter接口改版后可能随时失效,需要同步跟进社区修复补丁。
方案3:Selenium 模拟浏览器爬取(兜底方案)
- 该方案不需要特殊接口权限,直接在Twitter搜索URL中拼接
lang:ur参数即可,示例URL格式为https://twitter.com/search?q=目标关键词%20lang%3Aur&src=typed_query,浏览器加载后默认展示的就是初筛后的乌尔都语推文。 - 爬取过程中需要自行实现滚动加载、元素等待逻辑,同时建议加上和Twint方案一致的Unicode字符占比校验,过滤页面夹带的广告、推荐内容等非目标数据。
- 注意:该方案爬取速度最慢,需要配置随机等待、真实浏览器指纹等反爬绕过策略,仅适合小批量数据采集场景,不建议用于万级以上数据量爬取。
通用优化提示:不要单独使用langdetect这类通用语言检测库做乌尔都语识别,这类库对阿拉伯语系分支语言的区分度极差,很容易把阿拉伯语、波斯语、旁遮普语内容误判为乌尔都语。用平台原生语言参数+Unicode字符占比校验的两层过滤逻辑,非目标内容的漏判率可以控制在1%以下。
内容的提问来源于stack exchange,提问作者Umair Mayo
相关产品推荐
相关产品推荐

