前言:
本次同样在twitter上进行数据挖掘,主题是构建图,计算相似度,找到同样喜欢梅西的人,之后可以进行好友推荐,或者用户建群等。
编辑工具:anaconda 的jupyter notebook,所以会直接在代码后面跟上输出。
数据集:如果不想麻烦的弄数据的话,可以跳过下面获取数据步骤,直接使用文末数据,导入即可。
获取Twitter好友数据
写入授权令牌
import twitter
consumer_key = "填入自己的授权令牌"
consumer_secret = "填入自己的授权令牌"
access_token = "填入自己的授权令牌"
access_token_secret = "填入自己的授权令牌"
authorization = twitter.OAuth(access_token,access_token_secret,consumer_key,consumer_secret)
t = twitter.Twitter(auth=authorization,retry=True)
获取用户数据
import os
data_folder = "E:\DataMining\Project\dataming_with_python\chapter_7用图挖掘到感兴趣的人"
output_filename = os.path.join(data_folder,"python_tweets.json")
import json
original_users = [] #用户信息
tweets = [] #消息文本
user_ids = {} #关联用户编号和昵称
search_result = t.search.tweets(q="Lionel Messi",count=60)['statuses']
for tweet in search_result:
if 'text' in tweet:
original_users.append(tweet['user']['screen_name'])
user_ids[tweet['user']['screen_name']] = tweet['user']['id']
tweets.append(tweet['text'])
len(tweets)
60
获取Twitter好友信息,这里假设搜索Lionel Messi的都是喜欢的
import time
#创建函数
def get_friends(t,user_id):
friends =[]
cursor = -1 #游标,管理翻页
while cursor != 0:
try:
results = t.friends.ids(user_id=user_id,cursor=cursor,count=5000)
friends.extend([friend for friend in results['ids']])
cursor = results['next_cursor']
if len(friends) > 10000: #用户好友很多时限制
break
#处理异常
except TypeError as e:
if results is None:
print('API次数限制,等待五分钟')
sys.stdout.flush()
time.sleep(5*60) #等五分钟
else:
raise e
except twitter.TwitterHTTPError as e:
break
finally