Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -85,25 +85,27 @@ def htmlToDataframe(htmlTable):
|
|
85 |
def getSavoirFaireFromHTMLMetier(url):
|
86 |
response = requests.get(url)
|
87 |
soup = BeautifulSoup(response.text, "html.parser")
|
88 |
-
allSavoirFaire = soup.select('
|
89 |
if len(allSavoirFaire) != 0:
|
90 |
allSF = "<table><tr><td>Savoir-faire</td><td>Libelle</td><td>Type</td><td>Categorie</td></tr>"
|
91 |
for i in range(0,len(allSavoirFaire)):
|
92 |
blockSavoirFaire = allSavoirFaire[i]
|
93 |
try:
|
94 |
soupSavoirFaire = BeautifulSoup(str(blockSavoirFaire), "html.parser")
|
95 |
-
titleSavoirFaire = soupSavoirFaire.select('
|
96 |
-
descriptSavoirFaire = soupSavoirFaire.select('
|
97 |
if removeTags(titleSavoirFaire[0]) != None:
|
98 |
for j in range(0,len(descriptSavoirFaire)):
|
99 |
ssblockSavoirFaire = descriptSavoirFaire[j]
|
100 |
-
soupssSavoirFaire = BeautifulSoup(str(ssblockSavoirFaire), "html.parser")
|
101 |
-
sstitleSavoirFaire = soupssSavoirFaire.select('h5.fm-block-form-subtitle')
|
102 |
-
listSavoirFaire = soupssSavoirFaire.select('ul.list-unstyled > li')
|
103 |
-
if len(listSavoirFaire) != 0:
|
104 |
-
for k in range(0,len(listSavoirFaire)):
|
105 |
-
blockListSavoirFaire = removeTags(listSavoirFaire[k])
|
106 |
-
allSF += "<tr><td>" + removeTags(titleSavoirFaire[0]) + "</td><td>" + blockListSavoirFaire + "</td><td>" + removeTags(sstitleSavoirFaire[0]) + "</td><td>1</td></tr>"
|
|
|
|
|
107 |
except:
|
108 |
print("Pas de Savoir-Faire!")
|
109 |
allSF += "</table>"
|
@@ -246,16 +248,18 @@ def datavisualisation_chiffres_cles_emplois(url):
|
|
246 |
if removeTags(allnumembauchesfirst[0]).find('\xa0') != -1:
|
247 |
allnumembauches = removeTags(allnumembauchesfirst[0]).split('\xa0')
|
248 |
allnumembauches = ''.join(allnumembauches)
|
|
|
249 |
else:
|
250 |
-
allnumembauches = removeTags(allnumembauchesfirst[0]).replace(" ","")
|
251 |
print("Embauches avec tableau" + str(removeTags(allnumembauchesfirst[0])))
|
252 |
print("Embauches sans tableau" + str(removeTags(allnumembauchesfirst)))
|
253 |
|
254 |
if removeTags(allnumembauchesfirst[1]).find('\xa0') != -1:
|
255 |
allnumoffres = removeTags(allnumembauchesfirst[1]).split('\xa0')
|
256 |
allnumoffres = ''.join(allnumoffres)
|
|
|
257 |
else:
|
258 |
-
allnumoffres = removeTags(allnumembauchesfirst[1]).replace(" ","")
|
259 |
alldetailembauches = soup.select('p.hiring_text.ng-star-inserted')
|
260 |
allnumevolutionembauches = soup.select('p.main.ng-star-inserted')
|
261 |
alldetailevolutionembauches = soup.select('p.population_bubble-title')
|
@@ -279,13 +283,13 @@ def datavisualisation_chiffres_cles_emplois(url):
|
|
279 |
allFAPsalaires = soup.select('p.sectorTable__cellValue')
|
280 |
if len(allFAPsalaires) >= 3:
|
281 |
allsalaires = "<table><tr><td>categorie</td><td>emploi</td><td>salaire</td></tr>"
|
282 |
-
allsalaires += "<tr><td>" + removeTags(alltypesalaires[1]) + "</td><td>" + removeTags(allcategorie[0]) + "</td><td>" + removeTags(allFAPsalaires[0]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
283 |
-
allsalaires += "<tr><td>" + removeTags(alltypesalaires[2]) + "</td><td>" + removeTags(allcategorie[0]) + "</td><td>" + removeTags(allFAPsalaires[1]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
284 |
-
allsalaires += "<tr><td>" + removeTags(alltypesalaires[3]) + "</td><td>" + removeTags(allcategorie[0]) + "</td><td>" + removeTags(allFAPsalaires[2]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
285 |
if len(allFAP) >= 2 and len(allFAPsalaires) == 6:
|
286 |
-
allsalaires += "<tr><td>" + removeTags(alltypesalaires[1]) + "</td><td>" + removeTags(allcategorie[4]) + "</td><td>" + removeTags(allFAPsalaires[3]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
287 |
-
allsalaires += "<tr><td>" + removeTags(alltypesalaires[2]) + "</td><td>" + removeTags(allcategorie[4]) + "</td><td>" + removeTags(allFAPsalaires[4]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
288 |
-
allsalaires += "<tr><td>" + removeTags(alltypesalaires[3]) + "</td><td>" + removeTags(allcategorie[4]) + "</td><td>" + removeTags(allFAPsalaires[5]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
289 |
allsalaires += "</table>"
|
290 |
|
291 |
alltypedifficultes = soup.select('.tabs-main-content_persp-col2-bar.ng-star-inserted')
|
@@ -293,7 +297,7 @@ def datavisualisation_chiffres_cles_emplois(url):
|
|
293 |
allpcdifficulte = soup.select('div.horizontal-graph_data')
|
294 |
alldifficultes = "<table><tr><td>Indicateur</td><td>Valeur</td></tr>"
|
295 |
for i in range(0,len(alltypedifficultes)):
|
296 |
-
alldifficultes += "<tr><td>" + removeTags(alldifficulte[i]) + "</td><td>" + removeTags(allpcdifficulte[i]).replace('Pour le territoire principal FRANCE pour les ' + removeTags(alldifficulte[i]),'').replace('%','') + "</td></tr>"
|
297 |
alldifficultes += "</table>"
|
298 |
|
299 |
alltyperepartitions = soup.select('div.hiring-contract_legende_item.ng-star-inserted')
|
@@ -309,7 +313,7 @@ def datavisualisation_chiffres_cles_emplois(url):
|
|
309 |
allpcentreprise = soup.select('span.data.ng-star-inserted')
|
310 |
allentreprises = "<table><tr><td>Indicateur</td><td>Valeur</td></tr>"
|
311 |
for i in range(0,len(allentrepriserepartitions)):
|
312 |
-
allentreprises += "<tr><td>" + removeTags(allentrepriserepartitions[i])[0:-4] + "</td><td>" + removeTags(allentrepriserepartitions[i])[-4:].replace('%','').replace(',','.') + "</td></tr>"
|
313 |
allentreprises += "</table>"
|
314 |
|
315 |
return [alldemandeurs, allsalaires, alldifficultes, allrepartitions, allentreprises]
|
@@ -1393,14 +1397,14 @@ def load_from_skills(n_clicks, array_value, theme):
|
|
1393 |
for j in range(0, len(array_value)):
|
1394 |
ficheSF = getSavoirFaireFromHTMLMetier("https://candidat.francetravail.fr/metierscope/fiche-metier/" + array_value[j])
|
1395 |
fig_SF = datavisualisation_skills_context(htmlToDataframe(ficheSF), template, paper_bgcolor, plot_bgcolor, "Savoir-faire", array_value[j])
|
1396 |
-
ficheSavoir = getSavoirFromHTMLMetier("https://candidat.francetravail.fr/metierscope/fiche-metier/" + array_value[j])
|
1397 |
-
fig_Savoir = datavisualisation_skills_context(htmlToDataframe(ficheSavoir), template, paper_bgcolor, plot_bgcolor, "Savoirs", array_value[j])
|
1398 |
-
ficheContext = getContextFromHTMLMetier("https://candidat.francetravail.fr/metierscope/fiche-metier/" + array_value[j])
|
1399 |
-
fig_Context = datavisualisation_skills_context(htmlToDataframe(ficheContext), template, paper_bgcolor, plot_bgcolor, "Contexte", array_value[j])
|
1400 |
|
1401 |
children.append(dmc.GridCol(html.Div(dcc.Loading(id="loadingPlot",children=(dcc.Graph(figure=fig_SF)), type="default"), style=styleTitle), span=12),)
|
1402 |
-
children.append(dmc.GridCol(html.Div(dcc.Loading(id="loadingPlot",children=(dcc.Graph(figure=fig_Savoir)), type="default"), style=styleTitle), span=12),)
|
1403 |
-
children.append(dmc.GridCol(html.Div(dcc.Loading(id="loadingPlot",children=(dcc.Graph(figure=fig_Context)), type="default"), style=styleTitle), span=12),)
|
1404 |
|
1405 |
return dmc.Grid(children=children), False
|
1406 |
|
|
|
85 |
def getSavoirFaireFromHTMLMetier(url):
|
86 |
response = requests.get(url)
|
87 |
soup = BeautifulSoup(response.text, "html.parser")
|
88 |
+
allSavoirFaire = soup.select('div#collapse-fm-1 > div[data-cy="liste-savoir-faire-principaux"]')
|
89 |
if len(allSavoirFaire) != 0:
|
90 |
allSF = "<table><tr><td>Savoir-faire</td><td>Libelle</td><td>Type</td><td>Categorie</td></tr>"
|
91 |
for i in range(0,len(allSavoirFaire)):
|
92 |
blockSavoirFaire = allSavoirFaire[i]
|
93 |
try:
|
94 |
soupSavoirFaire = BeautifulSoup(str(blockSavoirFaire), "html.parser")
|
95 |
+
titleSavoirFaire = soupSavoirFaire.select('p[role="heading"]')
|
96 |
+
descriptSavoirFaire = soupSavoirFaire.select('ul > li')
|
97 |
if removeTags(titleSavoirFaire[0]) != None:
|
98 |
for j in range(0,len(descriptSavoirFaire)):
|
99 |
ssblockSavoirFaire = descriptSavoirFaire[j]
|
100 |
+
#soupssSavoirFaire = BeautifulSoup(str(ssblockSavoirFaire), "html.parser")
|
101 |
+
#sstitleSavoirFaire = soupssSavoirFaire.select('h5.fm-block-form-subtitle')
|
102 |
+
#listSavoirFaire = soupssSavoirFaire.select('ul.list-unstyled > li')
|
103 |
+
#if len(listSavoirFaire) != 0:
|
104 |
+
#for k in range(0,len(listSavoirFaire)):
|
105 |
+
#blockListSavoirFaire = removeTags(listSavoirFaire[k])
|
106 |
+
#allSF += "<tr><td>" + removeTags(titleSavoirFaire[0]) + "</td><td>" + blockListSavoirFaire + "</td><td>" + removeTags(sstitleSavoirFaire[0]) + "</td><td>1</td></tr>"
|
107 |
+
blockListSavoirFaire = removeTags(ssblockSavoirFaire)
|
108 |
+
allSF += "<tr><td>" + removeTags(titleSavoirFaire[0]) + "</td><td>" + blockListSavoirFaire + "</td><td>Savoir-faire principaux</td><td>1</td></tr>"
|
109 |
except:
|
110 |
print("Pas de Savoir-Faire!")
|
111 |
allSF += "</table>"
|
|
|
248 |
if removeTags(allnumembauchesfirst[0]).find('\xa0') != -1:
|
249 |
allnumembauches = removeTags(allnumembauchesfirst[0]).split('\xa0')
|
250 |
allnumembauches = ''.join(allnumembauches)
|
251 |
+
allnumembauches = allnumembauches.replace(" ","").strip()
|
252 |
else:
|
253 |
+
allnumembauches = removeTags(allnumembauchesfirst[0]).replace(" ","").strip()
|
254 |
print("Embauches avec tableau" + str(removeTags(allnumembauchesfirst[0])))
|
255 |
print("Embauches sans tableau" + str(removeTags(allnumembauchesfirst)))
|
256 |
|
257 |
if removeTags(allnumembauchesfirst[1]).find('\xa0') != -1:
|
258 |
allnumoffres = removeTags(allnumembauchesfirst[1]).split('\xa0')
|
259 |
allnumoffres = ''.join(allnumoffres)
|
260 |
+
allnumoffres = allnumoffres.replace(" ","").strip()
|
261 |
else:
|
262 |
+
allnumoffres = removeTags(allnumembauchesfirst[1]).replace(" ","").strip()
|
263 |
alldetailembauches = soup.select('p.hiring_text.ng-star-inserted')
|
264 |
allnumevolutionembauches = soup.select('p.main.ng-star-inserted')
|
265 |
alldetailevolutionembauches = soup.select('p.population_bubble-title')
|
|
|
283 |
allFAPsalaires = soup.select('p.sectorTable__cellValue')
|
284 |
if len(allFAPsalaires) >= 3:
|
285 |
allsalaires = "<table><tr><td>categorie</td><td>emploi</td><td>salaire</td></tr>"
|
286 |
+
allsalaires += "<tr><td>" + removeTags(alltypesalaires[1]) + "</td><td>" + removeTags(allcategorie[0]) + "</td><td>" + removeTags(allFAPsalaires[0]).replace('\xa0','').replace(' ','').replace('€','').replace(' ','').strip() + "</td></tr>"
|
287 |
+
allsalaires += "<tr><td>" + removeTags(alltypesalaires[2]) + "</td><td>" + removeTags(allcategorie[0]) + "</td><td>" + removeTags(allFAPsalaires[1]).replace('\xa0','').replace(' ','').replace('€','').replace(' ','').strip() + "</td></tr>"
|
288 |
+
allsalaires += "<tr><td>" + removeTags(alltypesalaires[3]) + "</td><td>" + removeTags(allcategorie[0]) + "</td><td>" + removeTags(allFAPsalaires[2]).replace('\xa0','').replace(' ','').replace('€','').replace(' ','').strip() + "</td></tr>"
|
289 |
if len(allFAP) >= 2 and len(allFAPsalaires) == 6:
|
290 |
+
allsalaires += "<tr><td>" + removeTags(alltypesalaires[1]) + "</td><td>" + removeTags(allcategorie[4]) + "</td><td>" + removeTags(allFAPsalaires[3]).replace('\xa0','').replace(' ','').replace('€','').replace(' ','').strip() + "</td></tr>"
|
291 |
+
allsalaires += "<tr><td>" + removeTags(alltypesalaires[2]) + "</td><td>" + removeTags(allcategorie[4]) + "</td><td>" + removeTags(allFAPsalaires[4]).replace('\xa0','').replace(' ','').replace('€','').replace(' ','').strip() + "</td></tr>"
|
292 |
+
allsalaires += "<tr><td>" + removeTags(alltypesalaires[3]) + "</td><td>" + removeTags(allcategorie[4]) + "</td><td>" + removeTags(allFAPsalaires[5]).replace('\xa0','').replace(' ','').replace('€','').replace(' ','').strip() + "</td></tr>"
|
293 |
allsalaires += "</table>"
|
294 |
|
295 |
alltypedifficultes = soup.select('.tabs-main-content_persp-col2-bar.ng-star-inserted')
|
|
|
297 |
allpcdifficulte = soup.select('div.horizontal-graph_data')
|
298 |
alldifficultes = "<table><tr><td>Indicateur</td><td>Valeur</td></tr>"
|
299 |
for i in range(0,len(alltypedifficultes)):
|
300 |
+
alldifficultes += "<tr><td>" + removeTags(alldifficulte[i]) + "</td><td>" + removeTags(allpcdifficulte[i]).replace('Pour le territoire principal FRANCE pour les ' + removeTags(alldifficulte[i]),'').replace('%','').strip() + "</td></tr>"
|
301 |
alldifficultes += "</table>"
|
302 |
|
303 |
alltyperepartitions = soup.select('div.hiring-contract_legende_item.ng-star-inserted')
|
|
|
313 |
allpcentreprise = soup.select('span.data.ng-star-inserted')
|
314 |
allentreprises = "<table><tr><td>Indicateur</td><td>Valeur</td></tr>"
|
315 |
for i in range(0,len(allentrepriserepartitions)):
|
316 |
+
allentreprises += "<tr><td>" + removeTags(allentrepriserepartitions[i])[0:-4] + "</td><td>" + removeTags(allentrepriserepartitions[i])[-4:].replace('%','').replace(',','.').strip() + "</td></tr>"
|
317 |
allentreprises += "</table>"
|
318 |
|
319 |
return [alldemandeurs, allsalaires, alldifficultes, allrepartitions, allentreprises]
|
|
|
1397 |
for j in range(0, len(array_value)):
|
1398 |
ficheSF = getSavoirFaireFromHTMLMetier("https://candidat.francetravail.fr/metierscope/fiche-metier/" + array_value[j])
|
1399 |
fig_SF = datavisualisation_skills_context(htmlToDataframe(ficheSF), template, paper_bgcolor, plot_bgcolor, "Savoir-faire", array_value[j])
|
1400 |
+
#ficheSavoir = getSavoirFromHTMLMetier("https://candidat.francetravail.fr/metierscope/fiche-metier/" + array_value[j])
|
1401 |
+
#fig_Savoir = datavisualisation_skills_context(htmlToDataframe(ficheSavoir), template, paper_bgcolor, plot_bgcolor, "Savoirs", array_value[j])
|
1402 |
+
#ficheContext = getContextFromHTMLMetier("https://candidat.francetravail.fr/metierscope/fiche-metier/" + array_value[j])
|
1403 |
+
#fig_Context = datavisualisation_skills_context(htmlToDataframe(ficheContext), template, paper_bgcolor, plot_bgcolor, "Contexte", array_value[j])
|
1404 |
|
1405 |
children.append(dmc.GridCol(html.Div(dcc.Loading(id="loadingPlot",children=(dcc.Graph(figure=fig_SF)), type="default"), style=styleTitle), span=12),)
|
1406 |
+
#children.append(dmc.GridCol(html.Div(dcc.Loading(id="loadingPlot",children=(dcc.Graph(figure=fig_Savoir)), type="default"), style=styleTitle), span=12),)
|
1407 |
+
#children.append(dmc.GridCol(html.Div(dcc.Loading(id="loadingPlot",children=(dcc.Graph(figure=fig_Context)), type="default"), style=styleTitle), span=12),)
|
1408 |
|
1409 |
return dmc.Grid(children=children), False
|
1410 |
|