Différences entre les versions de « Mondher »
Ligne 85 : | Ligne 85 : | ||
Page cible <br> | Page cible <br> | ||
https://www.24heures.ch/les-cours-en-ligne-engendrent-des-inegalites-800936194846 | https://www.24heures.ch/les-cours-en-ligne-engendrent-des-inegalites-800936194846 | ||
− | + | <br> | |
+ | <br> | ||
Code<br> | Code<br> | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> |
Version du 19 janvier 2021 à 10:24
Hello !
travail en cours : ranking de termes médiatiques
Quoi ?
Une page web affiche un ranking en temps réel des termes utilisés dans les articles d'une sélection de médias de Suisse romande.
Pour une sélection de sites internets, un classement des X mots les plus utilisés est présenté sous la forme d'un tableau de type indice boursier, avec les gains et les pertes en pourcentages de chaque terme.
Comment ?
1/ définir les sources
Une sélection de quatorze journaux suisse-romands a été retenue. Cette sélection contient la totalité des quotidiens de la partie francophone de Suisse; chaque canton est représenté. Les critères de sélection sont les suivants : le journal doit être un quotidien suisse-romand, il doit être francophone, il doit traiter de l’actualité internationale, nationale et cantonale et il doit diffuser ses informations sur un site internet et/ou une application entre autre.
Sélection:
· 24 heures (Canton de Vaud)
· Tribune de Genève (Canton de Genève)
· Le Temps (Canton de Genève)
· La Liberté (Canton de Fribourg)
· La Gruyère (Canton de Fribourg)
· Le Nouvelliste (Canton du Valais)
· Arc Info (Canton de Neuchâtel)
· Le Journal du Jura (partie francophone du Canton de Berne)
· Le Quotidien jurassien (Canton du Jura)
· La Côte (Région lémanique)
· La Région (Région Nord-vaudoise)
· Le Courrier (Romandie)
· Le Matin (Romandie)
· 20 Minutes (Romandie)
2/ diagramme de la base de données
Une structure de base de données a été créée sur sur phpMyAdmin. La base de données est structurée en catégories et sous-catégories distinctes. Toute informations récoltée est triée et classée dans la catégorie adéquate. Il y a trois catégories et trois sous-catégories :
—La catégorie article : elle regroupe l’ID de la catégorie article, le titre de l’article, son header, son corps de texte, sa date de publication, sa date de modification (s’il y en a une), son url, sa source
—— La sous-catégorie source : elle regroupe l’ID de la source , son nom et son url
—La catégorie article_aut·eur·ice: elle regroupe l’ID de la catégorie aut·eur·rice·s, l’ID de la sous-catégorie aut·eur·ice·s et l’ID des articles par aut·eur·rice·s
—— La sous-catégorie aut·eur·ice regroupe l’ID de chaque aut·eur·rice·s, son nom, son prénom et une courte bio (s’il y’en a une)
—La catégorie article_mots: elle regroupe l’ID de la catégorie article_mots, l’ID de chaque article, l’ID de la sous-catégorie mots
—— La sous-catégorie mots : elle regroupe l’ID de chaque mot retenu et classé, le mot en question et la valeur de sa fréquence d’apparition
Schéma de la structure de la base de données
3/ écrire un programme (en python) pour récolter et stocker les informations contenues dans certains sélecteurs css :
1. repère et pointe les sélecteurs css qui contiennent les informations nécessaires
2. initialise un objet "navigateur" pour se connecter au site web à l'aide de la librairie mechanize
3. contourne une éventuelle demande de certificat de sécurité ssl pour accéder au contenu de la page
4. extrait les données de la page web contenues dans les sélecteurs css ciblés
5. lit les données
6. encode les données en utf-8
7. récupère le contenu des sélecteurs css et les traduit en expressions xpath
8. print les informations
Schéma du processus
Test du programme
Page cible
https://www.24heures.ch/les-cours-en-ligne-engendrent-des-inegalites-800936194846
Code
#un programme qui récupère les données contenues dans les sélecteurs css suivants à partir d'une page d'article de 24heures.ch
#article h1, article h2, article h3, article p et article time
import mechanize
import lxml.html as lh
import cssselect
import ssl
#initialisation d'un objet "navigateur" avec la librairie mechanize
br = mechanize.Browser()
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
br.set_handle_robots(False)
#fin de la configuration de mechanize
try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else:
# Handle target environment that doesn't support HTTPS verification
ssl._create_default_https_context = _create_unverified_https_context
data = br.open('https://www.24heures.ch/les-cours-en-ligne-engendrent-des-inegalites-800936194846', timeout=10.0)
rawdata = data.read()
unicode = rawdata.decode('utf-8', 'ignore')
src = lh.fromstring(unicode)
#on convertit un sélecteur css en objets de type "cssselector"
selecteurs = cssselect.parse('article h1, article h2, article h3, article p, article time')
for selecteur in selecteurs:
chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteur, translate_pseudo_elements=True)
resultats = src.xpath(chemin_xpath)
for resultat in resultats:
print(resultat.text_content())