如何用Python提取提及我的推文中的链接并导出指定字段为CSV
需求说明
提取所有他人提及我账号的推文中包含的URL。
遇到的问题
推文中带有URL时,无法正常获取完整的推文文本;仅含纯文本的推文可以正常提取内容。
各库测试情况
Tweepy库测试代码
auth = tweepy.OAuthHandler(apiKey, apiSecretKey) auth.set_access_token(accesToken, secretToken) api = tweepy.API(auth, wait_on_rate_limit= True, wait_on_rate_limit_notify= True) search_words = "@LoremIp03500003 -filter:retweets" tweets =tweepy.Cursor(api.search, q=search_words, tweet_mode="extended").items(20) users = [[tweet.full_text, tweet.id] for tweet in tweets] users
Twython库测试代码
results = t.search(q="LoremIp03500003 -filter:retweets", tweet_mode='extended') all_tweets = results['statuses'] for tweet in all_tweets: print(tweet ['full_text'])
Twitter库测试代码
api = twitter.Api(apiKey, apiSecretKey, accesToken, secretToken) api.GetSearch(term="@LoremIp03500003")
最终目标
将所有提及我账号的推文导出为CSV文件,包含如下字段:
- 提及我的用户账号名
- 用户ID
- 推文文本
- 推文中包含的URL(如有)
- 推文ID
解决方案
该问题的核心原因是Twitter v1.1 API默认不会将推文内的URL直接填充到文本字段中,需要显式开启实体参数后从entities字段提取相关内容,以下是基于Tweepy可实现最终目标的完整代码:
import tweepy import csv # 替换为自己的API凭证 apiKey = "你的API Key" apiSecretKey = "你的API Secret Key" accesToken = "你的Access Token" secretToken = "你的Access Token Secret" auth = tweepy.OAuthHandler(apiKey, apiSecretKey) auth.set_access_token(accesToken, secretToken) api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True) search_words = "@LoremIp03500003 -filter:retweets" # 增加include_entities参数开启实体提取 tweets = tweepy.Cursor(api.search, q=search_words, tweet_mode="extended", include_entities=True).items(100) # 写入CSV文件 with open('mentions.csv', 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f) # 写入表头 writer.writerow(['用户账号名', '用户ID', '推文文本', '推文URL', '推文ID']) for tweet in tweets: # 提取所有URL,多URL用逗号分隔 urls = [url['expanded_url'] for url in tweet.entities['urls']] url_str = ','.join(urls) if urls else '' # 写入行数据 writer.writerow([ tweet.user.screen_name, tweet.user.id_str, tweet.full_text, url_str, tweet.id_str ])
说明:
- 新增的
include_entities=True参数会让API返回推文关联的所有实体信息,包括URL、提及账号、话题标签等内容 - 从
tweet.entities['urls']中提取的expanded_url是完整原始链接,不是Twitter短链接 - 使用
utf-8-sig编码保存CSV可避免中文乱码问题 - ID字段统一使用
id_str格式,避免数字过长导致的精度丢失问题
内容的提问来源于stack exchange,提问作者Merinoide
相关产品推荐
相关产品推荐

