forked from Journalisme-UQAM/moissonage2020
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmoisson-linaheckenast-JHR.py
127 lines (90 loc) · 5.81 KB
/
moisson-linaheckenast-JHR.py
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#coding : utf-8
import csv, requests
from bs4 import BeautifulSoup
### IMPRESSIONNANT SCRIPT! A+, EN DÉPIT DU RETARD! :)
fichier="soundcloud-JHR.csv"
url1 = "https://soundcloud.com/people/directory/"
entetes = {
"User-Agent":"Lina Heckenast, UQAM student data mining for a class"
}
letters = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9","_","-"]
n=0
nb = 0
urlBase = "https://soundcloud.com"
for letter in letters:
url2 = url1 + letter
print(url2)
#ici je créé l'ensemble des url de chaque lettre/chiffre/symbole, donc le premier niveau
site = requests.get(url2, headers=entetes)
# #print(site.status_code)
page = BeautifulSoup(site.text,"html.parser")
# #print(url2,page)
links = page.find_all("li", class_="sc-truncate peopleDirectory__generatedContentListItem")
# #print(links)
# #ici je trouve l'élément dans lequel toutes les URL sont contenues pour chaque lettre/chiffre/symbole, soit le 2e niveau de liens
for link in links:
links1 = urlBase+link.find("a")["href"]
# print(links1)
sitelinks1 = requests.get(links1, headers=entetes)
pagelinks1 = BeautifulSoup(sitelinks1.text,"html.parser")
links2 = pagelinks1.find_all("li", class_="sc-truncate peopleDirectory__generatedContentListItem")
# #ici je trouve l'élément dans lequel toutes les URL sont contenues pour chaque 2e niveau de liens
for link2 in links2:
links3 = urlBase+link2.find("a")["href"]
# print(links3)
sitelinks3 = requests.get(links3, headers=entetes)
pagelinks3 = BeautifulSoup(sitelinks3.text,"html.parser")
links4 = pagelinks3.find_all("li", class_="sc-truncate peopleDirectory__generatedContentListItem")
# #ici je trouve l'élément dans lequel toutes les URL sont contenues pour chaque 3e niveau de liens, dans lequel les URL des users est contenu
for link4 in links4:
links5 = urlBase+link4.find("a")["href"]
print(links5)
sitelinks5 = requests.get(links5, headers=entetes)
pagelinks5 = BeautifulSoup(sitelinks5.text,"html.parser")
links6 = pagelinks5.find_all("li", class_="sc-truncate peopleDirectory__generatedContentListItem")
# #ici je trouve l'élément dans lequel toutes les URL sont contenues pour chaque 4e niveau de lien, soit les URL des usagers
nb += len(links6) ### POUR COMPTER LE NOMBRE TOTAL DE USERS SUR SOUNDCLOUD
print(nb)
for link6 in links6:
urlUser = urlBase+link6.find("a")["href"]
# print(urlUsers) ### JE VAIS METTRE CETTE VARIABLE AU SINGULIER, CAR ICI, CE QUE TU AS, C'EST L'URL D'UN PROFIL INDIVIDUEL
print(urlUser)
siteurlUser = requests.get(urlUser, headers=entetes)
pageUser = BeautifulSoup(siteurlUser.text,"html.parser")
# #À partir d'ici ça devrait fonctionner comme en haut, mais de ce que j'ai lu en ligne, il se pourrait que je ne sois pas
# #capable de moissonner l'info parce que ce serait des blocs de javascript qui envoient l'information
# #en même temps, l'info est vraiment dans le code html du site, ce qui fait que je ne comprends pas trop.
# #en inspectant j'ai tout de même vu un path de JS, donc je me dis que tout est possible.
### LES DEUX LIGNES CI-DESSOUS NE SONT PAS UTILES.
# profile = pageurlUsers.find_all("div",class_="profileHeaderInfo__content sc-media-content")
# print(profile)
### C'EST UN CAS OÙ LES BALISES META PEUVENT RECELER DES INFOS INTÉRESSANTES
# for info in profile: ### BOUCLE NON NÉCESSAIRE
n+=1
# directory=list()
directory = []
# username = info.find("h3", class_="profileHeaderInfo__userName g-type-shrinkwrap-block g-type-shrinkwrap-large-primary")
# name2 = info.find("h4", class_="profileHeaderInfo__additional g-type-shrinkwrap-block g-type-shrinkwrap-large-secondary")
# #ici je ne savais pas comment différencier les deux
# location = info.find("h4", class_="profileHeaderInfo__additional g-type-shrinkwrap-block g-type-shrinkwrap-large-secondary")
# #print(n,username,name2,location)
nom = pageUser.find("meta", attrs={"property":"og:title"})["content"]
pseudo = link6.find("a")["href"][1:]
try:
ville = pageUser.find("meta", attrs={"property":"og:locality"})["content"]
except:
ville = ""
try:
pays = pageUser.find("meta", attrs={"property":"og:country"})["content"]
except:
pays = ""
numero = pageUser.find("meta", attrs={"property":"twitter:app:url:googleplay"})["content"]
numero = numero.split(":")[-1].strip()
# directory.append(username)
# directory.append(name2)
# directory.append(location)
directory = [n,numero,nom,pseudo,ville,pays]
print(directory)
# mumble=open(fichier,"a")
# rap=csv.writer(mumble)
# rap.writerow(directory)