Différences entre les versions de « Utilisateur:Simon BLONDEAU »
(8 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 308 : | Ligne 308 : | ||
https://untappd.com/ | https://untappd.com/ | ||
− | Mélange entre base de données et réseau social. Nécessite une inscription pour l'utilisation et le marketing de l'application (car c'est aussi et surtout une application sur smartphone) suggère une application sociale avec leur slogan "Drink Socially". | + | Mélange entre base de données et réseau social. Nécessite une inscription pour l'utilisation et le marketing de l'application (car c'est aussi et surtout une application sur smartphone) suggère une application sociale avec leur slogan "Drink Socially". Le site est de même nature que google avis, trip advisor, yelp ou tout autre service de conseil entre utilisateur et où ces derniers s'improvise spécialiste. |
celui-ci est spécialisé dans le référencement de bar/brasserie/bière et donc de leurs catégorisation. Les tenanciers des bars et des brasserie peuvent y entrer leurs produits avec toutes les caractéristiques (degrés d'alcool, niveau d'amertume, houblon et malt utilisé, etc...) et les utilisateurs peuvent les noter et les reclasser en fonction de leurs appréciations. | celui-ci est spécialisé dans le référencement de bar/brasserie/bière et donc de leurs catégorisation. Les tenanciers des bars et des brasserie peuvent y entrer leurs produits avec toutes les caractéristiques (degrés d'alcool, niveau d'amertume, houblon et malt utilisé, etc...) et les utilisateurs peuvent les noter et les reclasser en fonction de leurs appréciations. | ||
+ | |||
+ | |||
+ | https://www.facebook.com/groups/Glitchcollective | ||
+ | |||
+ | Page sur laquelle est publié toute sorte d'oeuvre produite par des artistes se revendiquant du courant numérique du Glitch. Cette page se traduit maintenant en regroupement de contenu artistique numérique. C'est plus du partage de contenu que réellement une base de données. Mais c'est une base de donnée classé par artistes et par dates qui se présente devant nous sans qualification concrète du contenu excepté le fait que les artistes se revendique du même courant. | ||
+ | |||
+ | |||
+ | https://feu.ultravnr.be/ | ||
+ | |||
+ | Site regroupant les événements à venir sur Bruxelles et les expositions. Les événements sont annoncés et classé sur la page de manière chronologique mais des catégories d'événements sont aussi présentes ce qui permet de faire quelques recherches pour trouver quelque chose de plus précis que juste un événements (type soirée, workshop, expo, cours etc..). | ||
+ | Le site n'est malheureusement plus actif depuis juin apparement mais les archives sont toujours là pour montrer ce qu'il y a eu auparavant. | ||
+ | |||
+ | ==Schéma== | ||
+ | |||
+ | [[Fichier:Schéma Simon.png]] | ||
+ | |||
+ | ==Schéma du script== | ||
+ | [[Fichier:schema_simon_3.png]] | ||
+ | |||
+ | =Script journalistique Mondher 2eme quadri= | ||
+ | |||
+ | ===le matin=== | ||
+ | |||
+ | <syntaxhighlight lang="python"> | ||
+ | #un programme qui récupère les données contenues dans les sélecteurs css suivants à partir d'une page d'article de lematin.ch | ||
+ | |||
+ | import mechanize | ||
+ | |||
+ | import lxml.html as lh | ||
+ | |||
+ | import cssselect | ||
+ | |||
+ | import ssl | ||
+ | |||
+ | import os | ||
+ | |||
+ | from urllib.parse import urlparse | ||
+ | |||
+ | |||
+ | def getSrcFromURL(url): | ||
+ | data = br.open(url) | ||
+ | |||
+ | rawdata = data.read() | ||
+ | unicode = rawdata.decode('utf-8', 'ignore') | ||
+ | src = lh.fromstring(unicode) | ||
+ | return src | ||
+ | |||
+ | def getResults(src, selecteur): | ||
+ | chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteur, translate_pseudo_elements=True) | ||
+ | results = src.xpath(chemin_xpath) | ||
+ | return results | ||
+ | |||
+ | #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.lacote.ch/articles/sports/tennis/tennis-open-d-australie-belinda-bencic-se-qualifie-pour-le-troisieme-tour-1043578', timeout=10.0) | ||
+ | |||
+ | src = getSrcFromURL('https://www.lematin.ch/') | ||
+ | |||
+ | #on convertit un sélecteur css en objets de type "cssselector" | ||
+ | selecteurs = cssselect.parse('article a') | ||
+ | |||
+ | |||
+ | for selecteur in selecteurs: | ||
+ | print(selecteur) | ||
+ | articleLinks = getResults(src, selecteur) | ||
+ | |||
+ | for articleLink in articleLinks: | ||
+ | print (articleLink.get('href')) | ||
+ | src = getSrcFromURL(articleLink.get('href')) | ||
+ | |||
+ | selecteursArticle = cssselect.parse('div.Article_elementTitle__3we9B h1, div.Article_elementLead__2nNxU h2, h3, div.Article_elementTextblockarray__WdRYM p, .sc-17d1f6z-1.gBPCId') | ||
+ | |||
+ | for selecteurArticle in selecteursArticle: | ||
+ | print(selecteurArticle) | ||
+ | resultats = getResults(src, selecteurArticle) | ||
+ | |||
+ | for resultat in resultats: | ||
+ | print(resultat.text_content()) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===20 minutes=== | ||
+ | |||
+ | <syntaxhighlight lang="python"> | ||
+ | #un programme qui récupère les données contenues dans les sélecteurs css suivants à partir d'une page d'article de 20min.ch | ||
+ | |||
+ | import mechanize | ||
+ | |||
+ | import lxml.html as lh | ||
+ | |||
+ | import cssselect | ||
+ | |||
+ | import ssl | ||
+ | |||
+ | import os | ||
+ | |||
+ | from urllib.parse import urlparse | ||
+ | |||
+ | |||
+ | def getSrcFromURL(url): | ||
+ | data = br.open(url) | ||
+ | |||
+ | rawdata = data.read() | ||
+ | unicode = rawdata.decode('utf-8', 'ignore') | ||
+ | src = lh.fromstring(unicode) | ||
+ | return src | ||
+ | |||
+ | def getResults(src, selecteur): | ||
+ | chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteur, translate_pseudo_elements=True) | ||
+ | results = src.xpath(chemin_xpath) | ||
+ | return results | ||
+ | |||
+ | #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.lacote.ch/articles/sports/tennis/tennis-open-d-australie-belinda-bencic-se-qualifie-pour-le-troisieme-tour-1043578', timeout=10.0) | ||
+ | |||
+ | src = getSrcFromURL('https://www.20min.ch/fr/suisse-romande') | ||
+ | |||
+ | #on convertit un sélecteur css en objets de type "cssselector" | ||
+ | selecteurs = cssselect.parse('article a') | ||
+ | |||
+ | |||
+ | for selecteur in selecteurs: | ||
+ | print(selecteur) | ||
+ | articleLinks = getResults(src, selecteur) | ||
+ | |||
+ | for articleLink in articleLinks: | ||
+ | print (articleLink.get('href')) | ||
+ | src = getSrcFromURL(articleLink.get('href')) | ||
+ | |||
+ | selecteursArticle = cssselect.parse('div.Article_elementTitle__3we9B h1, div.Article_elementLead__2nNxU h2, h3, div.Article_elementTextblockarray__WdRYM p, .sc-17d1f6z-1.gBPCId') | ||
+ | |||
+ | for selecteurArticle in selecteursArticle: | ||
+ | print(selecteurArticle) | ||
+ | resultats = getResults(src, selecteurArticle) | ||
+ | |||
+ | for resultat in resultats: | ||
+ | print(resultat.text_content()) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | =Reprise du projet de base de données de vitraux= | ||
+ | |||
+ | j'ai tenté de recuperer sur un site du tourisme du jura suisse les images des vitraux qui étaient présent dessus grâce au programme suivant. | ||
+ | |||
+ | <syntaxhighlight lang="python"> | ||
+ | #un programme qui récupère les données contenues dans les sélecteurs css suivants à partir d'une page d'article de lecourrier.ch | ||
+ | #article h1, article h2, article h3, article p et article time | ||
+ | |||
+ | import mechanize | ||
+ | |||
+ | import lxml.html as lh | ||
+ | |||
+ | import cssselect | ||
+ | |||
+ | import ssl | ||
+ | |||
+ | import os | ||
+ | |||
+ | from urllib.parse import urlparse | ||
+ | |||
+ | import json | ||
+ | |||
+ | import re | ||
+ | |||
+ | def getSrcFromURL(url): | ||
+ | data = br.open(url) | ||
+ | |||
+ | rawdata = data.read() | ||
+ | unicode = rawdata.decode('utf-8', 'ignore') | ||
+ | src = lh.fromstring(unicode) | ||
+ | return src | ||
+ | |||
+ | def getResults(src, selecteur): | ||
+ | chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteur, translate_pseudo_elements=True) | ||
+ | results = src.xpath(chemin_xpath) | ||
+ | return results | ||
+ | |||
+ | #initialisation de l'objet db, interface avec la base de données mysql | ||
+ | db = mysql.connect( | ||
+ | host = "localhost", | ||
+ | user = "root", | ||
+ | passwd = "root", | ||
+ | database = "Vitrail" | ||
+ | ) | ||
+ | |||
+ | #SELECT = sélectionner des données | ||
+ | #INSERT = insérer des données | ||
+ | #UPDATE = mettre à jour des données | ||
+ | #DELETE = supprimer des données | ||
+ | |||
+ | #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 | ||
+ | |||
+ | |||
+ | |||
+ | src = getSrcFromURL('https://www.j3l.ch/fr/Z10792/vitraux_1552925653?bounds=6.84388+47.02175+7.46940+47.50228') | ||
+ | |||
+ | |||
+ | #on convertit un sélecteur css en objets de type "cssselector" | ||
+ | selecteurs = cssselect.parse('#list-data') | ||
+ | |||
+ | selecteursImages = cssselect.parse('div.Image img') | ||
+ | |||
+ | i = 0 | ||
+ | |||
+ | for selecteur in selecteurs: | ||
+ | |||
+ | print(selecteur) | ||
+ | |||
+ | resultats = getResults(src, selecteur) | ||
+ | |||
+ | for resultat in resultats: | ||
+ | data = json.loads(resultat.text_content()) | ||
+ | for element in data['features']: | ||
+ | |||
+ | print(element['properties']['link']) | ||
+ | |||
+ | elementSrc = getSrcFromURL('https://www.j3l.ch'+element['properties']['link']) | ||
+ | |||
+ | selecteurs2 = cssselect.parse('div.richtext p, ul.m-fact-list__list__list li') | ||
+ | selecteursImages = cssselect.parse('div.swiper-wrapper div div.Image img') | ||
+ | |||
+ | for selecteur2 in selecteurs2: | ||
+ | print(selecteur2) | ||
+ | resultats2 = getResults(elementSrc, selecteur2) | ||
+ | for resultat2 in resultats2: | ||
+ | print(resultat2.text_content()) | ||
+ | |||
+ | for selecteur in selecteursImages: | ||
+ | print(selecteur) | ||
+ | chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteur, translate_pseudo_elements=True) | ||
+ | resultats = elementSrc.xpath(chemin_xpath) | ||
+ | |||
+ | for resultat in resultats: | ||
+ | |||
+ | l = resultat.get('data-sizes') | ||
+ | sizes = l.split(' ') | ||
+ | size = sizes[0] | ||
+ | imageUrl = re.sub(r'[0-9]+x[0-9]+:', '', size) | ||
+ | print('downloading'+imageUrl) | ||
+ | filename = 'img'+str(i)+'.jpg' | ||
+ | data = br.open(imageUrl).read() | ||
+ | |||
+ | save = open(filename, 'wb') | ||
+ | save.write(data) | ||
+ | save.close() | ||
+ | |||
+ | i = i + 1 | ||
+ | break | ||
+ | |||
+ | |||
+ | cursor = db.cursor() | ||
+ | cursor.execute(query) | ||
+ | db.commit() | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===résumé du projet=== | ||
+ | Le but avec ce programme étant de pouvoir rentrer les images dans une base de données afin de pouvoir grâce à un réseau de neurones, créer un vitrail médian entre toute les entrées. | ||
+ | Le choix au début se portait sur la base de données des vitraux de France sur le site des monuments français. Malheureusement, ce fut impossible de pouvoir accéder à la suite du site et nous n'arrivions qu'a récupérer les quelques images de la première page. | ||
+ | C'est pourquoi nous avons finalement fait le choix de partir sur le site du tourisme du jura suisse qui référence lui aussi ses vitraux. l'autre problème c'est que la base de données est pauvre et n'est composée que d'une vingtaine d'entrée différente. Je ne sais pas si ça aurait suffit pour qu'un réseau de neurones produise quelque chose avec le deep learning. |
Version actuelle datée du 24 avril 2021 à 13:06
page de code premier quadri B2 de simon
scénario binaire python
Un programme qui replacerait les vers dans un ordre aléatoire de sorte à afficher à chaque fois une nouvelle version de la poésie
La voiture bouge
Le pied crisse
Le ceval rose
Perdant son ame
Qu'etait la vie
Le flux cosmique
La nuit est loin,
Le ciel est gris
Je suis tombee
resolution du problème de Max farré
Ce programme génère aléatoirement deux vers en fonction de l'âge de du nom de l'utilisateur. Si le poème est validé par l'utilisateur, il reçoit un bisous sinon le programme lui indique sa tristesse.
-->réponse
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import string
import unicodedata
with open ('poeme','r') as tete:
poeme = tete.read()
lignes = poeme.splitlines()
print("Quel est ton nom ?")
nom = raw_input("entrez votre nom : ")
nom = unicodedata.normalize('NFD',unicode(nom,'utf-8')).encode('ascii','ignore')
nom = nom.lower()
asciiChars = list(string.ascii_lowercase)
nombreNom = 0
for compteur in range(0,len(nom)):
searchLigne = nom[compteur]
for compteur2 in range(0,len(asciiChars)):
laLigneQuonRegarde = asciiChars[compteur2]
if(laLigneQuonRegarde == searchLigne):
nombreNom = nombreNom + compteur2
break
nombreNom = nombreNom % len(lignes)
print("Quel est ton âge ?")
age = input("entrez votre age : ")
age = age % len(lignes)
print(lignes[nombreNom])
print(lignes[age])
print('Cela vous convient ?\nOui/Non')
choix = raw_input()
if(choix == "Oui"):
print('trop bien :-* <3')
if(choix == "Non"):
print(":'-( snif snif")
sélection de poème
poème qui mélange les vers
poème original :
La voiture roule
Le pied crisse
Le ceval rose
Perdant son ami
Qu'etait la vie
Le flux cosmique
La nuit est loin,
Le ciel est gris
Je suis tombee
Tout en hauteur
5lK5J 8.21JsMc1Js
j'aime la nuit
Il saigne peu,
Et s'Vk va tot
Un jour se leve
Les oiseaux chantent
nouveau poème, nouveau sens :
5lK5J 8.21JsMc1Js
Perdant son ami
Il saigne peu
Les oiseaux chantent
Je suis tombee
Et s'Vk va tot
Tout en hauteur
Qu'etait la vie
Le flux cosmique
Un jour se leve
Le ceval rose
Le ciel est gris
La nuit est loin
Le pied crisse
j'aime la nuit
La voiture roule
sélection de deux vers en fonction du nom et de l'âge de l'interrogé
poème original :
La voiture roule
Le pied crisse
Le ceval rose
Perdant son ami
Qu'etait la vie
Le flux cosmique
La nuit est loin,
Le ciel est gris
Je suis tombee
Tout en hauteur
5lK5J 8.21JsMc1Js
j'aime la nuit
Il saigne peu,
Et s'Vk va tot
Un jour se leve
Les oiseaux chantent
sélection :
Quel est ton nom ?
entrez votre nom : simon
Quel est ton âge ?
entrez votre age : 23
Le pied crisse
Le ciel est gris
Cela vous convient ?
Oui/Non
Oui
trop bien :-* <3
page de code de simon deuxième quadri B2
création de bot
petit scénario de bot
premier exemple
création d'un bot sur twitter qui DM trump pour l'instulter sur la base d'un "you" et ensuite un adjectif suivi d'une insulte
les adjectifs seront trouvés sur https://englishgrammarhere.com/adjectives/negative-personality-adjectives-list-in-english/ et les insultes seront trouvées sur http://www.insult.wiki/wiki/Insult_List
le bot lui enverra un message à chaque nouveau tweet ou alors un par jour
deuxième exemple
création d'un bot qui rechercherait sur google "florida man" plus une date jusqu'a faire une année entière il selectionnerais toujours dans les mots "arrested" ou alors "try to"
exemple un bot qui retweetait tout article en lien avec florida man https://twitter.com/_FloridaMan
explication de la trend florida man https://en.wikipedia.org/wiki/Florida_Man
"update du scénario" scénario qui renviendrait à poster tous les jours une citation d'un livre (en l'occurence la pierre et le sabre de Eiji Yoshikawa) et de la faire sous titrer par le nom d'un dirigeant de l'URSS. Une parodie de compte de citation de gens célèbre en somme
schema de bot
+----------------------+ +-----------------------------+ | | |se rend sur la page wikipédia| | lancement du script +--------->+"liste des dirigeants | | | |de l'union so^iétique" | | | +--------------------------+--+ +----------+-----------+ | | | | v v +--------------+----------+ +----------+------------+ |selectionne aléatoirement| |se rend sur l'onglet | |un nom/prénom de | |citation du livre | |dirigeant de l'URSS | |"la pierre et le sabre"| +--------------------+----+ |sur le site babelio | | +-----------+-----------+ | | | v | +----------+----------+ | |sélectionne | v |aléatoirement une | +-------------------+-------+ |citation du livre | |sous-titre la citation avec| |parmis celles postées+---------------------->+le nom et le prénom d'un | +---------------------+ |dirigeant de l'URSS | +-------+-------------------+ XXXXXXXXXXXXXXXXXXXXXXXXXX | XXXX XXXX | XXX XXX Bidule machin XXX v X X X @superbidule X +---+--------+ XX X X XX <-------+poste sur | X X X X |twitter sous| X XXX X <-------+cette forme | X "citation de la pierre X +------------+ X et le sabre" X X X X X XX - un dirigeant de l'URSS XX XX XX XXXX XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX
page de code premier quadri de B3 de simon
base de données
https://www.animecharactersdatabase.com/
Base de données regroupant les personnages de divers production d'animation japonaise pour les fans plus ou moins hardcore. Des classements par tags décrivant visuellement les personnages sont présent. des tests pour affiner les "catégorisations" sont mis en oeuvre et des classements hiérarchiques selon les utilisateurs sont aussi de mise. C'est un site de plus ou moins mauvais gouts.
Mélange entre base de données et réseau social. Nécessite une inscription pour l'utilisation et le marketing de l'application (car c'est aussi et surtout une application sur smartphone) suggère une application sociale avec leur slogan "Drink Socially". Le site est de même nature que google avis, trip advisor, yelp ou tout autre service de conseil entre utilisateur et où ces derniers s'improvise spécialiste. celui-ci est spécialisé dans le référencement de bar/brasserie/bière et donc de leurs catégorisation. Les tenanciers des bars et des brasserie peuvent y entrer leurs produits avec toutes les caractéristiques (degrés d'alcool, niveau d'amertume, houblon et malt utilisé, etc...) et les utilisateurs peuvent les noter et les reclasser en fonction de leurs appréciations.
https://www.facebook.com/groups/Glitchcollective
Page sur laquelle est publié toute sorte d'oeuvre produite par des artistes se revendiquant du courant numérique du Glitch. Cette page se traduit maintenant en regroupement de contenu artistique numérique. C'est plus du partage de contenu que réellement une base de données. Mais c'est une base de donnée classé par artistes et par dates qui se présente devant nous sans qualification concrète du contenu excepté le fait que les artistes se revendique du même courant.
Site regroupant les événements à venir sur Bruxelles et les expositions. Les événements sont annoncés et classé sur la page de manière chronologique mais des catégories d'événements sont aussi présentes ce qui permet de faire quelques recherches pour trouver quelque chose de plus précis que juste un événements (type soirée, workshop, expo, cours etc..). Le site n'est malheureusement plus actif depuis juin apparement mais les archives sont toujours là pour montrer ce qu'il y a eu auparavant.
Schéma
Schéma du script
Script journalistique Mondher 2eme quadri
le matin
#un programme qui récupère les données contenues dans les sélecteurs css suivants à partir d'une page d'article de lematin.ch
import mechanize
import lxml.html as lh
import cssselect
import ssl
import os
from urllib.parse import urlparse
def getSrcFromURL(url):
data = br.open(url)
rawdata = data.read()
unicode = rawdata.decode('utf-8', 'ignore')
src = lh.fromstring(unicode)
return src
def getResults(src, selecteur):
chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteur, translate_pseudo_elements=True)
results = src.xpath(chemin_xpath)
return results
#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.lacote.ch/articles/sports/tennis/tennis-open-d-australie-belinda-bencic-se-qualifie-pour-le-troisieme-tour-1043578', timeout=10.0)
src = getSrcFromURL('https://www.lematin.ch/')
#on convertit un sélecteur css en objets de type "cssselector"
selecteurs = cssselect.parse('article a')
for selecteur in selecteurs:
print(selecteur)
articleLinks = getResults(src, selecteur)
for articleLink in articleLinks:
print (articleLink.get('href'))
src = getSrcFromURL(articleLink.get('href'))
selecteursArticle = cssselect.parse('div.Article_elementTitle__3we9B h1, div.Article_elementLead__2nNxU h2, h3, div.Article_elementTextblockarray__WdRYM p, .sc-17d1f6z-1.gBPCId')
for selecteurArticle in selecteursArticle:
print(selecteurArticle)
resultats = getResults(src, selecteurArticle)
for resultat in resultats:
print(resultat.text_content())
20 minutes
#un programme qui récupère les données contenues dans les sélecteurs css suivants à partir d'une page d'article de 20min.ch
import mechanize
import lxml.html as lh
import cssselect
import ssl
import os
from urllib.parse import urlparse
def getSrcFromURL(url):
data = br.open(url)
rawdata = data.read()
unicode = rawdata.decode('utf-8', 'ignore')
src = lh.fromstring(unicode)
return src
def getResults(src, selecteur):
chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteur, translate_pseudo_elements=True)
results = src.xpath(chemin_xpath)
return results
#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.lacote.ch/articles/sports/tennis/tennis-open-d-australie-belinda-bencic-se-qualifie-pour-le-troisieme-tour-1043578', timeout=10.0)
src = getSrcFromURL('https://www.20min.ch/fr/suisse-romande')
#on convertit un sélecteur css en objets de type "cssselector"
selecteurs = cssselect.parse('article a')
for selecteur in selecteurs:
print(selecteur)
articleLinks = getResults(src, selecteur)
for articleLink in articleLinks:
print (articleLink.get('href'))
src = getSrcFromURL(articleLink.get('href'))
selecteursArticle = cssselect.parse('div.Article_elementTitle__3we9B h1, div.Article_elementLead__2nNxU h2, h3, div.Article_elementTextblockarray__WdRYM p, .sc-17d1f6z-1.gBPCId')
for selecteurArticle in selecteursArticle:
print(selecteurArticle)
resultats = getResults(src, selecteurArticle)
for resultat in resultats:
print(resultat.text_content())
Reprise du projet de base de données de vitraux
j'ai tenté de recuperer sur un site du tourisme du jura suisse les images des vitraux qui étaient présent dessus grâce au programme suivant.
#un programme qui récupère les données contenues dans les sélecteurs css suivants à partir d'une page d'article de lecourrier.ch
#article h1, article h2, article h3, article p et article time
import mechanize
import lxml.html as lh
import cssselect
import ssl
import os
from urllib.parse import urlparse
import json
import re
def getSrcFromURL(url):
data = br.open(url)
rawdata = data.read()
unicode = rawdata.decode('utf-8', 'ignore')
src = lh.fromstring(unicode)
return src
def getResults(src, selecteur):
chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteur, translate_pseudo_elements=True)
results = src.xpath(chemin_xpath)
return results
#initialisation de l'objet db, interface avec la base de données mysql
db = mysql.connect(
host = "localhost",
user = "root",
passwd = "root",
database = "Vitrail"
)
#SELECT = sélectionner des données
#INSERT = insérer des données
#UPDATE = mettre à jour des données
#DELETE = supprimer des données
#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
src = getSrcFromURL('https://www.j3l.ch/fr/Z10792/vitraux_1552925653?bounds=6.84388+47.02175+7.46940+47.50228')
#on convertit un sélecteur css en objets de type "cssselector"
selecteurs = cssselect.parse('#list-data')
selecteursImages = cssselect.parse('div.Image img')
i = 0
for selecteur in selecteurs:
print(selecteur)
resultats = getResults(src, selecteur)
for resultat in resultats:
data = json.loads(resultat.text_content())
for element in data['features']:
print(element['properties']['link'])
elementSrc = getSrcFromURL('https://www.j3l.ch'+element['properties']['link'])
selecteurs2 = cssselect.parse('div.richtext p, ul.m-fact-list__list__list li')
selecteursImages = cssselect.parse('div.swiper-wrapper div div.Image img')
for selecteur2 in selecteurs2:
print(selecteur2)
resultats2 = getResults(elementSrc, selecteur2)
for resultat2 in resultats2:
print(resultat2.text_content())
for selecteur in selecteursImages:
print(selecteur)
chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteur, translate_pseudo_elements=True)
resultats = elementSrc.xpath(chemin_xpath)
for resultat in resultats:
l = resultat.get('data-sizes')
sizes = l.split(' ')
size = sizes[0]
imageUrl = re.sub(r'[0-9]+x[0-9]+:', '', size)
print('downloading'+imageUrl)
filename = 'img'+str(i)+'.jpg'
data = br.open(imageUrl).read()
save = open(filename, 'wb')
save.write(data)
save.close()
i = i + 1
break
cursor = db.cursor()
cursor.execute(query)
db.commit()
résumé du projet
Le but avec ce programme étant de pouvoir rentrer les images dans une base de données afin de pouvoir grâce à un réseau de neurones, créer un vitrail médian entre toute les entrées. Le choix au début se portait sur la base de données des vitraux de France sur le site des monuments français. Malheureusement, ce fut impossible de pouvoir accéder à la suite du site et nous n'arrivions qu'a récupérer les quelques images de la première page. C'est pourquoi nous avons finalement fait le choix de partir sur le site du tourisme du jura suisse qui référence lui aussi ses vitraux. l'autre problème c'est que la base de données est pauvre et n'est composée que d'une vingtaine d'entrée différente. Je ne sais pas si ça aurait suffit pour qu'un réseau de neurones produise quelque chose avec le deep learning.