1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#!/usr/bin/env python3
#-*- coding:utf-8 -*-
import networkx as nx
from html.parser import HTMLParser
import re, os
G = nx.Graph()
node_colors = []
# gescrapte Daten laden
f = open("data/users.txt", encoding = "utf-8")
addresses = eval(f.read())
f.close()
class User(object):
def __init__(self, name, firstname, lastname, mail, nick, provider):
self.name = name
self.firstname = firstname
self.lastname = lastname
self.mail = mail
self.nick = nick
self.provider = provider
users = []
# Adressen durchgehen und Edges / Nodes erstellen
for user in addresses:
if len(addresses[user]) < 1:
continue
firstname, lastname = re.match("(.+) ([^ ]+)", user).groups()
nick, provider = re.match("(.*?)@([^@]+)", addresses[user]).groups()
users.append(User(user, firstname, lastname, addresses[user], nick, provider))
for user in users:
G.add_node(user.name)
# nicht weiter verarbeiten
users.remove(user)
userswithprovider = len([i for i in users if i.provider == user.provider])
if userswithprovider > 0:
G.add_node(user.provider)
G.add_edge(user.name, user.provider)
brothersisters = [i for i in users if i.lastname == user.lastname]
if len(brothersisters) > 0:
for brothersister in brothersisters:
G.add_edge(user.name, brothersister.name)
samenicks = [i for i in users if i.nick == user.nick]
if len(samenicks) > 0:
for samenick in samenicks:
G.add_edge(user.name, samenick.name)
nx.write_gml(G, 'data/graph.gml')
# Encoding fixen
p = HTMLParser()
f = open('data/graph.gml', 'r')
s = p.unescape(f.read())
f.close()
os.remove('data/graph.gml')
f = open('data/graph.gml', 'w')
f.write(s)
f.close()
|