使用图挖掘发现值得关注的账户
立即解锁
发布时间: 2025-08-21 01:07:22 阅读量: 2 订阅数: 5 


Python数据挖掘实战指南
### 使用图挖掘发现值得关注的账户
#### 1. 从 Twitter 获取关注者信息
要获取用户的朋友(即该用户关注的人)信息,可使用 `friends/ids` API。它有优点也有缺点,优点是一次 API 调用最多可返回 5000 个朋友 ID;缺点是每 15 分钟只能进行 15 次调用,这意味着获取每个用户的所有关注者至少需要 1 分钟,如果用户的朋友超过 5000 个,所需时间会更长。
以下是获取朋友信息的代码:
```python
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("You probably reached your API limit, waiting for 5 minutes")
sys.stdout.flush()
time.sleep(5*60) # 5 minute wait
else:
raise e
except twitter.TwitterHTTPError as e:
break
finally:
time.sleep(60)
return friends
```
代码解释:
- `cursor` 用于 Twitter 的分页,初始值为 -1 表示结果开始。
- 当 `cursor` 不为 0 时,不断请求用户的朋友信息并添加到 `friends` 列表中。
- 若 `friends` 列表长度超过 10000,跳出循环,避免处理拥有大量朋友的用户时陷入长时间等待。
- 处理可能出现的 `TypeError` ,若 `results` 为 `None` ,可能是达到 API 限制,等待 5 分钟后重试;若为其他 `TypeError` ,则抛出异常。
- 处理 `twitter.TwitterHTTPError` ,若出现此类错误,停止处理该用户并返回已获取的朋友信息。
- 每次请求后等待 1 分钟,以遵守 API 调用限制。
#### 2. 构建网络
首先,从原始用户开始,获取他们的朋友信息并存储在字典中:
```python
friends = {}
for screen_name in relevant_users:
user_id = user_ids[screen_name]
friends[user_id] = get_friends(t, user_id)
```
然后,移除没有朋友的用户,因为无法基于朋友关系为这些用户进行推荐:
```python
friends = {user_id: friends[user_id] for user_id in friends if len(friends[user_id]) > 0}
```
接下来,将用户数量增加到 150 个。由于 API 限制,获取每个用户的朋友信息需要 1 分钟,因此获取 150 个用户的朋友信息需要 2.5 小时。为确保获取到优质用户,我们基于共享连接来搜索用户。
以下是计算朋友出现次数的代码:
```python
from collections import defaultdict
def count_friends(friends):
fri
```
0
0
复制全文
相关推荐









