<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://curlybraces.be/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Etienne</id>
	<title>{} - Contributions de l’utilisateur [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://curlybraces.be/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Etienne"/>
	<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/Sp%C3%A9cial:Contributions/Etienne"/>
	<updated>2026-05-11T00:09:20Z</updated>
	<subtitle>Contributions de l’utilisateur</subtitle>
	<generator>MediaWiki 1.35.10</generator>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=Etienne_Grignon&amp;diff=5090</id>
		<title>Etienne Grignon</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=Etienne_Grignon&amp;diff=5090"/>
		<updated>2021-05-07T19:43:44Z</updated>

		<summary type="html">&lt;p&gt;Etienne : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Etienne ==&lt;br /&gt;
&lt;br /&gt;
Je me suis fait aider dans mon projet n&amp;#039;ayant pas eu le temps de me pencher plus sur le cours durant cette année scolaire. Mon travail consistait à récupérer des photos d&amp;#039;oiseaux sur le site Oiseaux.net (ici seulement ceux de la première page). Il y a quelques problèmes que je n&amp;#039;ai pas pu résoudre comme celui de récupérer les images des autres pages, ainsi que les images qui ont un autre sélecteur&lt;br /&gt;
&lt;br /&gt;
import mechanize&lt;br /&gt;
 &lt;br /&gt;
import lxml.html as lh&lt;br /&gt;
 &lt;br /&gt;
import cssselect&lt;br /&gt;
 &lt;br /&gt;
import ssl&lt;br /&gt;
 &lt;br /&gt;
page = 0&lt;br /&gt;
liensOiseaux = []&lt;br /&gt;
#initialisation d&amp;#039;un objet &amp;quot;navigateur&amp;quot; avec la librairie mechanize&lt;br /&gt;
br = mechanize.Browser()&lt;br /&gt;
 &lt;br /&gt;
br.addheaders = [(&amp;#039;User-agent&amp;#039;, &amp;#039;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&amp;#039;)]&lt;br /&gt;
 &lt;br /&gt;
br.set_handle_robots(False)&lt;br /&gt;
#fin de la configuration de mechanize&lt;br /&gt;
 &lt;br /&gt;
try:&lt;br /&gt;
    _create_unverified_https_context = ssl._create_unverified_context&lt;br /&gt;
except AttributeError:&lt;br /&gt;
    # Legacy Python that doesn&amp;#039;t verify HTTPS certificates by default&lt;br /&gt;
    pass&lt;br /&gt;
else:&lt;br /&gt;
    # Handle target environment that doesn&amp;#039;t support HTTPS verification&lt;br /&gt;
    ssl._create_default_https_context = _create_unverified_https_context&lt;br /&gt;
 &lt;br /&gt;
data = br.open(&amp;#039;https://www.oiseaux.net/photos/photo&amp;#039;+ str(page) +&amp;#039;.html&amp;#039;, timeout=10.0)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
rawdata = data.read()&lt;br /&gt;
unicode = rawdata.decode(&amp;#039;utf-8&amp;#039;, &amp;#039;ignore&amp;#039;)&lt;br /&gt;
src = lh.fromstring(unicode)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
selecteurs = cssselect.parse(&amp;#039;#galerie a&amp;#039;)&lt;br /&gt;
chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteurs[0], translate_pseudo_elements=True)&lt;br /&gt;
resultats = src.xpath(chemin_xpath)&lt;br /&gt;
&lt;br /&gt;
for resultat in resultats :&lt;br /&gt;
	lien = resultat.get(&amp;#039;href&amp;#039;)&lt;br /&gt;
	lien = lien[1:]&lt;br /&gt;
	lienUtile = &amp;quot;https://www.oiseaux.net/photos&amp;quot; + lien&lt;br /&gt;
	liensOiseaux.append(lienUtile)&lt;br /&gt;
&lt;br /&gt;
for loop in range (len(liensOiseaux)):&lt;br /&gt;
	data = br.open(liensOiseaux[loop], timeout=10.0)&lt;br /&gt;
	rawdata = data.read()&lt;br /&gt;
	unicode = rawdata.decode(&amp;#039;utf-8&amp;#039;, &amp;#039;ignore&amp;#039;)&lt;br /&gt;
	src = lh.fromstring(unicode)&lt;br /&gt;
	selecteurs = cssselect.parse(&amp;#039;.monimage&amp;#039;)&lt;br /&gt;
	chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteurs[0], translate_pseudo_elements=True)&lt;br /&gt;
	resultats = src.xpath(chemin_xpath)&lt;br /&gt;
	for resultat in resultats:&lt;br /&gt;
		imageUrl = resultat.get(&amp;#039;src&amp;#039;)&lt;br /&gt;
		filename = str(loop) +&amp;#039;.jpg&amp;#039;&lt;br /&gt;
		data = br.open(imageUrl).read() &lt;br /&gt;
		save = open(filename, &amp;#039;wb&amp;#039;)&lt;br /&gt;
		save.write(data)&lt;br /&gt;
		save.close()&lt;br /&gt;
&lt;br /&gt;
== Projet ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je souhaite créer une base de données collectant un maximum d’articles sur ma ville de Verrières-le -Buisson dans pleins de journaux différents. Classant les journaux par dates ou types d’événements. J’ai développé une fascination étrange pour ma ville depuis que j’y ai découvert les vidéos d’événements culturelles de celle-ci sur leurs chaîne Youtube. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://www.linternaute.com/ville/verrieres-le-buisson/ville-91645&lt;br /&gt;
&lt;br /&gt;
https://www.leparisien.fr/essonne-91/verrieres-le-buisson-91370/&lt;br /&gt;
&lt;br /&gt;
https://www.francebleu.fr/ile-de-france/essonne-91/verrieres-le-buisson-91645&lt;br /&gt;
&lt;br /&gt;
http://randovlb.org/&lt;br /&gt;
&lt;br /&gt;
https://actu.fr/ile-de-france/verrieres-le-buisson_91645&lt;br /&gt;
&lt;br /&gt;
https://www.rnpc.fr/carte-des-centres-rnpc/region-ile-de-france/centre-rnpc-verrieres-le-buisson/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sch%C3%A9ma_programmation.jpg]]&lt;/div&gt;</summary>
		<author><name>Etienne</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=Etienne_Grignon&amp;diff=4655</id>
		<title>Etienne Grignon</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=Etienne_Grignon&amp;diff=4655"/>
		<updated>2021-01-19T19:18:29Z</updated>

		<summary type="html">&lt;p&gt;Etienne : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Etienne ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projet ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je souhaite créer une base de données collectant un maximum d’articles sur ma ville de Verrières-le -Buisson dans pleins de journaux différents. Classant les journaux par dates ou types d’événements. J’ai développé une fascination étrange pour ma ville depuis que j’y ai découvert les vidéos d’événements culturelles de celle-ci sur leurs chaîne Youtube. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://www.linternaute.com/ville/verrieres-le-buisson/ville-91645&lt;br /&gt;
&lt;br /&gt;
https://www.leparisien.fr/essonne-91/verrieres-le-buisson-91370/&lt;br /&gt;
&lt;br /&gt;
https://www.francebleu.fr/ile-de-france/essonne-91/verrieres-le-buisson-91645&lt;br /&gt;
&lt;br /&gt;
http://randovlb.org/&lt;br /&gt;
&lt;br /&gt;
https://actu.fr/ile-de-france/verrieres-le-buisson_91645&lt;br /&gt;
&lt;br /&gt;
https://www.rnpc.fr/carte-des-centres-rnpc/region-ile-de-france/centre-rnpc-verrieres-le-buisson/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Sch%C3%A9ma_programmation.jpg]]&lt;/div&gt;</summary>
		<author><name>Etienne</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=Etienne_Grignon&amp;diff=4654</id>
		<title>Etienne Grignon</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=Etienne_Grignon&amp;diff=4654"/>
		<updated>2021-01-19T19:16:46Z</updated>

		<summary type="html">&lt;p&gt;Etienne : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Etienne ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projet ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je souhaite créer une base de données collectant un maximum d’articles sur ma ville de Verrières-le -Buisson dans pleins de journaux différents. Classant les journaux par dates ou types d’événements. J’ai développé une fascination étrange pour ma ville depuis que j’y ai découvert les vidéos d’événements culturelles de celle-ci sur leurs chaîne Youtube. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://www.linternaute.com/ville/verrieres-le-buisson/ville-91645&lt;br /&gt;
&lt;br /&gt;
https://www.leparisien.fr/essonne-91/verrieres-le-buisson-91370/&lt;br /&gt;
&lt;br /&gt;
https://www.francebleu.fr/ile-de-france/essonne-91/verrieres-le-buisson-91645&lt;br /&gt;
&lt;br /&gt;
http://randovlb.org/&lt;br /&gt;
&lt;br /&gt;
https://actu.fr/ile-de-france/verrieres-le-buisson_91645&lt;br /&gt;
&lt;br /&gt;
https://www.rnpc.fr/carte-des-centres-rnpc/region-ile-de-france/centre-rnpc-verrieres-le-buisson/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://curlybraces.be/wiki/Fichier:Sch%C3%A9ma_programmation.jpg]&lt;/div&gt;</summary>
		<author><name>Etienne</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=ERG::Code-2020-2&amp;diff=4653</id>
		<title>ERG::Code-2020-2</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=ERG::Code-2020-2&amp;diff=4653"/>
		<updated>2021-01-19T19:14:02Z</updated>

		<summary type="html">&lt;p&gt;Etienne : /* Pages des étudiant.e.s */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Ce cours est destiné aux étudiant.e.s de BAC3. Cette année, nous nous concentrons sur les bases de données, définies comme &amp;quot;une collection structurée d&amp;#039;éléments sur laquelle l&amp;#039;utilisateur.trice peut effectuer une série d&amp;#039;opérations: voir, naviguer, chercher&amp;quot; (Lev Manovich, &amp;#039;&amp;#039;Le langage des Nouveaux Médias&amp;#039;&amp;#039;). &lt;br /&gt;
&lt;br /&gt;
==Sessions==&lt;br /&gt;
===17 décembre 2020===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import mechanize&lt;br /&gt;
&lt;br /&gt;
import lxml.html as lh&lt;br /&gt;
&lt;br /&gt;
import cssselect&lt;br /&gt;
&lt;br /&gt;
import ssl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def getInfos(src, selecteurcss):&lt;br /&gt;
    selecteur = cssselect.parse(selecteurcss)&lt;br /&gt;
    chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteur[0], translate_pseudo_elements=True)&lt;br /&gt;
    resultats = src.xpath(chemin_xpath)&lt;br /&gt;
    return resultats&lt;br /&gt;
&lt;br /&gt;
#initialisation d&amp;#039;un objet &amp;quot;navigateur&amp;quot; avec la librairie mechanize&lt;br /&gt;
br = mechanize.Browser()&lt;br /&gt;
&lt;br /&gt;
br.addheaders = [(&amp;#039;User-agent&amp;#039;, &amp;#039;Mozilla/5.0 (X11; Linux x86_64; rv:82.0) Gecko/20100101 Firefox/82.0&amp;#039;)]&lt;br /&gt;
&lt;br /&gt;
br.set_handle_robots(False)&lt;br /&gt;
#fin de la configuration de mechanize&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    _create_unverified_https_context = ssl._create_unverified_context&lt;br /&gt;
except AttributeError:&lt;br /&gt;
    # Legacy Python that doesn&amp;#039;t verify HTTPS certificates by default&lt;br /&gt;
    pass&lt;br /&gt;
else:&lt;br /&gt;
    # Handle target environment that doesn&amp;#039;t support HTTPS verification&lt;br /&gt;
    ssl._create_default_https_context = _create_unverified_https_context&lt;br /&gt;
&lt;br /&gt;
data = br.open(&amp;#039;https://regards.monuments-nationaux.fr/fr/asset/link/104-technique-s-et-materiau-x/vitrail/page/1&amp;#039;, timeout=10.0)&lt;br /&gt;
&lt;br /&gt;
#https://regards.monuments-nationaux.fr/fr/asset/link/104-technique-s-et-materiau-x/vitrail/page/1&lt;br /&gt;
&lt;br /&gt;
#https://regards.monuments-nationaux.fr/fr/asset/link/104-technique-s-et-materiau-x/vitrail/page/1&lt;br /&gt;
&lt;br /&gt;
#https://regards.monuments-nationaux.fr/fr/asset/link/104-technique-s-et-materiau-x/vitrail/page/2&lt;br /&gt;
&lt;br /&gt;
#br.follow_link(text_regex=r&amp;quot;cheese\s*shop&amp;quot;, nr=1)&lt;br /&gt;
#data = br.follow_link(url=r&amp;quot;/lesgrandsclassiques/Poemes&amp;quot;, nr=0)&lt;br /&gt;
&lt;br /&gt;
rawdata = data.read()&lt;br /&gt;
&lt;br /&gt;
unicode = rawdata.decode(&amp;#039;utf-8&amp;#039;, &amp;#039;ignore&amp;#039;)&lt;br /&gt;
src = lh.fromstring(unicode)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
thumbnails = getInfos(src, &amp;#039;span.thumbnail_url&amp;#039;)&lt;br /&gt;
descriptions = getInfos(src, &amp;#039;span.asset-descr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===10 décembre 2020===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
#on part de l&amp;#039;url de la thumbnail: https://regards.monuments-nationaux.fr//thumbnails/00000000100/gmw20_0194.thw&lt;br /&gt;
#et l&amp;#039;url du lien pour le zoom: fr/asset/id/99816/tour-de-la-lanterne-lanterne-vitraux/fromSearch/1/initiatorAction/metadataInternalLink/mosaicCount/2877/thumbIndex/0&lt;br /&gt;
#on veut arriver à ça: https://regards.monuments-nationaux.fr/fr/asset/assetFile/id/99816/size/3/type/1/filename/CMN_gmw20_0194&lt;br /&gt;
&lt;br /&gt;
thumbnailURL = input(&amp;#039;Entrer l\&amp;#039;url de la thumbnail&amp;#039;)&lt;br /&gt;
linkURL = input(&amp;#039;Entrer l\&amp;#039;url du lien&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
#thumbnailURL = &amp;#039;https://regards.monuments-nationaux.fr//thumbnails/00000000100/gmw20_0194.thw&amp;#039;&lt;br /&gt;
#linkURL = &amp;#039;fr/asset/id/99816/tour-de-la-lanterne-lanterne-vitraux/fromSearch/1/initiatorAction/metadataInternalLink/mosaicCount/2877/thumbIndex/0&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#de l&amp;#039;url du lien on récupère l&amp;#039;id grâce à une expression régulière&lt;br /&gt;
searchObj = re.search( r&amp;#039;id/([0-9]+)/&amp;#039;, linkURL )&lt;br /&gt;
id = searchObj.group(1)&lt;br /&gt;
&lt;br /&gt;
#https://regards.monuments-nationaux.fr//thumbnails/00000000100/gmw20_0194.thw&lt;br /&gt;
#de l&amp;#039;url de la thumbnail on récupère le nom du fichier sans l&amp;#039;extension&lt;br /&gt;
searchObj = re.search( r&amp;#039;/([^/]*)\.thw&amp;#039;, thumbnailURL )&lt;br /&gt;
fileName = searchObj.group(1)&lt;br /&gt;
&lt;br /&gt;
finalURL = &amp;#039;https://regards.monuments-nationaux.fr/fr/asset/assetFile/id/&amp;#039;+id+&amp;#039;/size/3/type/1/filename/&amp;#039;+fileName&lt;br /&gt;
print(&amp;#039;Attention voici l\&amp;#039;URL de l\&amp;#039;image! &amp;#039; + finalURL)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===03 décembre 2020===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#un programme qui récupère les données contenues dans les sélecteurs css suivants:&lt;br /&gt;
#article h1, div.lead, div.gr-media-image img, div.gr-article-content à partir d&amp;#039;une page d&amp;#039;article de lesoir.be&lt;br /&gt;
&lt;br /&gt;
import mechanize&lt;br /&gt;
&lt;br /&gt;
import lxml.html as lh&lt;br /&gt;
&lt;br /&gt;
import cssselect&lt;br /&gt;
&lt;br /&gt;
import ssl&lt;br /&gt;
&lt;br /&gt;
#initialisation d&amp;#039;un objet &amp;quot;navigateur&amp;quot; avec la librairie mechanize&lt;br /&gt;
br = mechanize.Browser()&lt;br /&gt;
&lt;br /&gt;
br.addheaders = [(&amp;#039;User-agent&amp;#039;, &amp;#039;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&amp;#039;)]&lt;br /&gt;
&lt;br /&gt;
br.set_handle_robots(False)&lt;br /&gt;
#fin de la configuration de mechanize&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    _create_unverified_https_context = ssl._create_unverified_context&lt;br /&gt;
except AttributeError:&lt;br /&gt;
    # Legacy Python that doesn&amp;#039;t verify HTTPS certificates by default&lt;br /&gt;
    pass&lt;br /&gt;
else:&lt;br /&gt;
    # Handle target environment that doesn&amp;#039;t support HTTPS verification&lt;br /&gt;
    ssl._create_default_https_context = _create_unverified_https_context&lt;br /&gt;
&lt;br /&gt;
data = br.open(&amp;#039;https://www.lesoir.be/340088/article/2020-11-26/reouverture-des-commerces-fetes-ce-qui-sera-discute-par-le-comite-de&amp;#039;, timeout=10.0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#print(data.read())&lt;br /&gt;
#br.follow_link(text_regex=r&amp;quot;cheese\s*shop&amp;quot;, nr=1)&lt;br /&gt;
#data = br.follow_link(url=r&amp;quot;/lesgrandsclassiques/Poemes&amp;quot;, nr=0)&lt;br /&gt;
&lt;br /&gt;
rawdata = data.read()&lt;br /&gt;
unicode = rawdata.decode(&amp;#039;utf-8&amp;#039;, &amp;#039;ignore&amp;#039;)&lt;br /&gt;
src = lh.fromstring(unicode)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#on convertit un sélecteur css en objets de type &amp;quot;cssselector&amp;quot;&lt;br /&gt;
selecteurs = cssselect.parse(&amp;#039;article h1, article h2&amp;#039;)&lt;br /&gt;
#   0&lt;br /&gt;
#[selecteur1, selecteur2]&lt;br /&gt;
&lt;br /&gt;
#[selecteur de type cssselect]&lt;br /&gt;
&lt;br /&gt;
for selecteur in selecteurs:&lt;br /&gt;
    chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteur, translate_pseudo_elements=True)&lt;br /&gt;
    resultats = src.xpath(chemin_xpath)&lt;br /&gt;
    for resultat in resultats:&lt;br /&gt;
        print(resultat.text_content())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===26 novembre 2020===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#un programme qui récupère les données contenues dans les sélecteurs css suivants:&lt;br /&gt;
#article h1, div.lead, div.gr-media-image img, div.gr-article-content à partir d&amp;#039;une page d&amp;#039;article de lesoir.be&lt;br /&gt;
&lt;br /&gt;
import mechanize&lt;br /&gt;
&lt;br /&gt;
import lxml.html as lh&lt;br /&gt;
&lt;br /&gt;
import cssselect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#initialisation d&amp;#039;un objet &amp;quot;navigateur&amp;quot; avec la librairie mechanize&lt;br /&gt;
br = mechanize.Browser()&lt;br /&gt;
&lt;br /&gt;
br.addheaders = [(&amp;#039;User-agent&amp;#039;, &amp;#039;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&amp;#039;)]&lt;br /&gt;
&lt;br /&gt;
br.set_handle_robots(False)&lt;br /&gt;
#fin de la configuration de mechanize&lt;br /&gt;
&lt;br /&gt;
data = br.open(&amp;#039;https://www.lesoir.be/340088/article/2020-11-26/reouverture-des-commerces-fetes-ce-qui-sera-discute-par-le-comite-de&amp;#039;, timeout=10.0)&lt;br /&gt;
&lt;br /&gt;
print(data.read())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#un programme qui récupère les données contenues dans les sélecteurs css suivants:&lt;br /&gt;
#article h1, div.lead, div.gr-media-image img, div.gr-article-content à partir d&amp;#039;une page d&amp;#039;article de lesoir.be&lt;br /&gt;
&lt;br /&gt;
import mechanize&lt;br /&gt;
&lt;br /&gt;
import lxml.html as lh&lt;br /&gt;
&lt;br /&gt;
import cssselect&lt;br /&gt;
&lt;br /&gt;
import ssl&lt;br /&gt;
&lt;br /&gt;
#initialisation d&amp;#039;un objet &amp;quot;navigateur&amp;quot; avec la librairie mechanize&lt;br /&gt;
br = mechanize.Browser()&lt;br /&gt;
&lt;br /&gt;
br.addheaders = [(&amp;#039;User-agent&amp;#039;, &amp;#039;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&amp;#039;)]&lt;br /&gt;
&lt;br /&gt;
br.set_handle_robots(False)&lt;br /&gt;
#fin de la configuration de mechanize&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    _create_unverified_https_context = ssl._create_unverified_context&lt;br /&gt;
except AttributeError:&lt;br /&gt;
    # Legacy Python that doesn&amp;#039;t verify HTTPS certificates by default&lt;br /&gt;
    pass&lt;br /&gt;
else:&lt;br /&gt;
    # Handle target environment that doesn&amp;#039;t support HTTPS verification&lt;br /&gt;
    ssl._create_default_https_context = _create_unverified_https_context&lt;br /&gt;
&lt;br /&gt;
data = br.open(&amp;#039;https://www.lesoir.be/340088/article/2020-11-26/reouverture-des-commerces-fetes-ce-qui-sera-discute-par-le-comite-de&amp;#039;, timeout=10.0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#print(data.read())&lt;br /&gt;
#br.follow_link(text_regex=r&amp;quot;cheese\s*shop&amp;quot;, nr=1)&lt;br /&gt;
#data = br.follow_link(url=r&amp;quot;/lesgrandsclassiques/Poemes&amp;quot;, nr=0)&lt;br /&gt;
&lt;br /&gt;
rawdata = data.read()&lt;br /&gt;
unicode = rawdata.decode(&amp;#039;utf-8&amp;#039;, &amp;#039;ignore&amp;#039;)&lt;br /&gt;
src = lh.fromstring(unicode)&lt;br /&gt;
&lt;br /&gt;
#une liste en python&lt;br /&gt;
#           0          1            2&lt;br /&gt;
liste = [&amp;#039;coucou&amp;#039;, &amp;#039;pouetpouet&amp;#039;, &amp;#039;byebye&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
print(liste[2])&lt;br /&gt;
&lt;br /&gt;
selecteurs = cssselect.parse(&amp;#039;article h1&amp;#039;)&lt;br /&gt;
#[selecteur de type cssselect]&lt;br /&gt;
chemin_xpath = cssselect.HTMLTranslator().selector_to_xpath(selecteurs[0], translate_pseudo_elements=True)&lt;br /&gt;
#selecteur de type xpath&lt;br /&gt;
&lt;br /&gt;
resultats = src.xpath(chemin_xpath)&lt;br /&gt;
#    0&lt;br /&gt;
#[html element]&lt;br /&gt;
print(resultats[0].text_content())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Formation HTML/CSS utile en complément du cours ici : ==&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=Y80juYcu3ZI&amp;amp;list=PLwLsbqvBlImHG5yeUCXJ1aqNMgUKi1NK3&lt;br /&gt;
&lt;br /&gt;
===19 novembre 2020===&lt;br /&gt;
&lt;br /&gt;
====html et css====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!doctype html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Sélecteurs css&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;link href=&amp;quot;styles.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;section id=&amp;quot;actualite&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h1&amp;gt;Ma section actualité&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;article class=&amp;quot;breve&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;header&amp;gt;Chapeau de l&amp;#039;article&amp;lt;/header&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
          Contenu de l&amp;#039;article &amp;lt;a href=&amp;quot;http://www.curlybraces.be&amp;quot;&amp;gt;Un lien vers un site&amp;lt;/a&amp;gt;&lt;br /&gt;
          &amp;lt;h3&amp;gt;Sous-titre de l&amp;#039;article&amp;lt;/h3&amp;gt;&lt;br /&gt;
          &amp;lt;time&amp;gt;13:00&amp;lt;/time&amp;gt;&lt;br /&gt;
          &amp;lt;time&amp;gt;13:00&amp;lt;/time&amp;gt;&lt;br /&gt;
          &amp;lt;time data-type=&amp;quot;begin-hour&amp;quot;&amp;gt;15:00&amp;lt;/time&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;footer&amp;gt;Footer de l&amp;#039;article&amp;lt;/footer&amp;gt;&lt;br /&gt;
      &amp;lt;/article&amp;gt;&lt;br /&gt;
      &amp;lt;article class=&amp;quot;article-full&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;header&amp;gt;Chapeau de l&amp;#039;article 2&amp;lt;/header&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
          Contenu de l&amp;#039;article 2 &amp;lt;a href=&amp;quot;http://www.curlybraces.be&amp;quot;&amp;gt;Un lien vers un site&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;footer&amp;gt;Footer de l&amp;#039;article 2&amp;lt;/footer&amp;gt;&lt;br /&gt;
      &amp;lt;/article&amp;gt;&lt;br /&gt;
      &amp;lt;article class=&amp;quot;article-full&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;header&amp;gt;Chapeau de l&amp;#039;article 3&amp;lt;/header&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
          Contenu de l&amp;#039;article 3 &amp;lt;a href=&amp;quot;http://www.curlybraces.be&amp;quot;&amp;gt;Un lien vers un site&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;footer&amp;gt;Footer de l&amp;#039;article 3&amp;lt;/footer&amp;gt;&lt;br /&gt;
      &amp;lt;/article&amp;gt;&lt;br /&gt;
    &amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;section id=&amp;quot;archives&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h1&amp;gt;Ma section Archives&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;article class=&amp;quot;breve&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;header&amp;gt;Chapeau de l&amp;#039;article&amp;lt;/header&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
          Contenu de l&amp;#039;article &amp;lt;a href=&amp;quot;http://www.curlybraces.be&amp;quot;&amp;gt;Un lien vers un site&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;footer&amp;gt;Footer de l&amp;#039;article&amp;lt;/footer&amp;gt;&lt;br /&gt;
      &amp;lt;/article&amp;gt;&lt;br /&gt;
    &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/*pointeur css vers balise html*/&lt;br /&gt;
html, body{&lt;br /&gt;
  margin:0;&lt;br /&gt;
  padding:0;&lt;br /&gt;
}&lt;br /&gt;
h1{&lt;br /&gt;
  font-family:Helvetica, Arial, sans-serif;&lt;br /&gt;
  font-weight:normal;&lt;br /&gt;
  margin:10px;&lt;br /&gt;
  padding:10px;&lt;br /&gt;
  border:1px solid black;&lt;br /&gt;
}&lt;br /&gt;
/*pointeur css vers un ID*/&lt;br /&gt;
section#archives{&lt;br /&gt;
  background-color:gray;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
article{&lt;br /&gt;
  border-bottom:1px solid black;&lt;br /&gt;
}&lt;br /&gt;
/*pointeur css vers une classe*/&lt;br /&gt;
.breve{&lt;br /&gt;
  font-size:48pt;&lt;br /&gt;
  border-bottom:2px solid black;&lt;br /&gt;
}&lt;br /&gt;
.article-full{&lt;br /&gt;
  font-size:16pt;&lt;br /&gt;
}&lt;br /&gt;
/* pointeur css avec chemin */&lt;br /&gt;
section#actualite a{&lt;br /&gt;
  color:green;&lt;br /&gt;
}&lt;br /&gt;
section#actualite article.article-full a{&lt;br /&gt;
  color:red;&lt;br /&gt;
}&lt;br /&gt;
/* pointeur css avec chemin vers un enfant précis d&amp;#039;une balise */&lt;br /&gt;
section#actualite article.article-full:nth-child(3) a{&lt;br /&gt;
  color:pink;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*pointeur css avec un chemin vers un élément qui suit directement un autre élément*/&lt;br /&gt;
h3+time{&lt;br /&gt;
  background:green;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
time[data-type=&amp;#039;begin-hour&amp;#039;]{&lt;br /&gt;
  background:blue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Librairies Python====&lt;br /&gt;
* pour naviguer:&lt;br /&gt;
** pycurl (http://pycurl.io/)&lt;br /&gt;
** urllib2 (https://docs.python.org/2/library/urllib2.html)&lt;br /&gt;
** requests (https://requests.readthedocs.io/en/master/)&lt;br /&gt;
** mechanize (https://mechanize.readthedocs.io/en/latest/index.html)&lt;br /&gt;
* pour parser:&lt;br /&gt;
** beautifulsoup (https://www.crummy.com/software/BeautifulSoup/bs4/doc/)&lt;br /&gt;
** lxml (https://lxml.de/xpathxslt.html)&lt;br /&gt;
** cssselect (https://cssselect.readthedocs.io/en/latest/)&lt;br /&gt;
&lt;br /&gt;
*User agent : &lt;br /&gt;
**What is my browser (https://www.whatismybrowser.com/guides/the-latest-user-agent/firefox)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import mechanize&lt;br /&gt;
import lxml.html as lh&lt;br /&gt;
import cssselect&lt;br /&gt;
&lt;br /&gt;
br = mechanize.Browser()&lt;br /&gt;
br.addheaders = [(&amp;#039;User-agent&amp;#039;, &amp;#039;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&amp;#039;)]&lt;br /&gt;
br.set_handle_robots(False)&lt;br /&gt;
data = br.open(&amp;#039;https://poesie.webnet.fr/lesgrandsclassiques/Authors/B&amp;#039;, timeout=10.0)&lt;br /&gt;
&lt;br /&gt;
#br.follow_link(text_regex=r&amp;quot;cheese\s*shop&amp;quot;, nr=1)&lt;br /&gt;
&lt;br /&gt;
#data = br.follow_link(url=r&amp;quot;/lesgrandsclassiques/Poemes&amp;quot;, nr=0)&lt;br /&gt;
&lt;br /&gt;
rawdata = data.read()&lt;br /&gt;
unicode = rawdata.decode(&amp;#039;utf-8&amp;#039;, &amp;#039;ignore&amp;#039;)&lt;br /&gt;
src = lh.fromstring(unicode)&lt;br /&gt;
&lt;br /&gt;
for selector in cssselect.parse(&amp;#039;.author-list__link&amp;#039;):&lt;br /&gt;
    expression = cssselect.HTMLTranslator().selector_to_xpath(selector, translate_pseudo_elements=True)&lt;br /&gt;
    for result in src.xpath(expression):&lt;br /&gt;
        print(result.text_content())&lt;br /&gt;
        print(result.get(&amp;#039;href&amp;#039;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pages des étudiant.e.s==&lt;br /&gt;
[[Utilisateur:Simon BLONDEAU|Simon Blondeau]]&lt;br /&gt;
&lt;br /&gt;
[[Page de William]]&lt;br /&gt;
&lt;br /&gt;
[[Mondher]]&lt;br /&gt;
&lt;br /&gt;
[[Lea]]&lt;br /&gt;
&lt;br /&gt;
[[MP Antoin]]&lt;br /&gt;
&lt;br /&gt;
[[Utilisateur:Pierreetheve|Pierre Ethève]]&lt;br /&gt;
&lt;br /&gt;
[[Utilisateur:Chloé|Chloé]]&lt;br /&gt;
&lt;br /&gt;
[[Jonquille]]&lt;br /&gt;
&lt;br /&gt;
[[margot]]&lt;br /&gt;
&lt;br /&gt;
[[Léo]]&lt;br /&gt;
&lt;br /&gt;
[[César]]&lt;br /&gt;
&lt;br /&gt;
[[Utilisateur:arthurlafontaine|Arthur Lafontaine]]&lt;br /&gt;
&lt;br /&gt;
[[Etienne Grignon]]&lt;br /&gt;
&lt;br /&gt;
==Déroulement du cours==&lt;br /&gt;
Le cours ne nécessite aucun prérequis si ce n&amp;#039;est une capacité d&amp;#039;attention pendant les séances. Cette attention implique qu&amp;#039;à certains moments, par exemple lors des moments de discussions ou de présentations, il sera demandé aux étudiant.e.s de fermer leur ordinateur, que l&amp;#039;usage des smartphones est interdit et que les étudiant.e.s doivent arriver à l&amp;#039;heure au cours (9h, le lundi matin).&lt;br /&gt;
&lt;br /&gt;
Comme il s&amp;#039;agit d&amp;#039;un cours technique, les travaux se feront majoritairement en classe et il n&amp;#039;est pas absolument nécessaire de travailler en dehors du cours, à part pour documenter les travaux ou préparer leurs présentations (les cotations).&lt;br /&gt;
&lt;br /&gt;
Le cours fonctionne en évaluation continue, ce qui signifie que chaque exercice réalisé en atelier aura une note attribuée. Pour réussir le cours, il faut essentiellement être présent.e.&lt;br /&gt;
&lt;br /&gt;
À cette évaluation continue s&amp;#039;ajoute deux notes en décembre et en mai qui correspondent aux moments de cotations. Il est demandé pour ces cotations de présenter une sélection des travaux réalisés jusque là.&lt;br /&gt;
&lt;br /&gt;
La difficulté technique, bien que présente, ne doit pas constituer une barrière pour assister au cours. Il ne sera pas demandé aux étudiant.e.s d&amp;#039;être performant.e.s mais plutôt de ne pas se braquer et d&amp;#039;accepter d&amp;#039;être inefficaces durant des périodes qui semblent parfois longues (voire trouver du plaisir dans ces périodes de recherches). L&amp;#039;entraide et le partage sont encouragés. Tout sera fait pour éviter des comportements de mise à distance du savoir entre celles et ceux &amp;quot;qui savent&amp;quot; et les &amp;quot;newbies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Chaque étudiant.e a accès à ce wiki, qui servira durant toute l&amp;#039;année à documenter les travaux. La création des comptes pour le wiki se fait au début du deuxième cours (au moment de l&amp;#039;inscription au cours).&lt;/div&gt;</summary>
		<author><name>Etienne</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=Fichier:Sch%C3%A9ma_programmation.jpg&amp;diff=4652</id>
		<title>Fichier:Schéma programmation.jpg</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=Fichier:Sch%C3%A9ma_programmation.jpg&amp;diff=4652"/>
		<updated>2021-01-19T19:11:21Z</updated>

		<summary type="html">&lt;p&gt;Etienne : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Etienne</name></author>
	</entry>
	<entry>
		<id>https://curlybraces.be/wiki/index.php?title=Etienne_Grignon&amp;diff=4651</id>
		<title>Etienne Grignon</title>
		<link rel="alternate" type="text/html" href="https://curlybraces.be/wiki/index.php?title=Etienne_Grignon&amp;diff=4651"/>
		<updated>2021-01-19T19:08:43Z</updated>

		<summary type="html">&lt;p&gt;Etienne : Page créée avec «  == Etienne ==    == Projet ==   Je souhaite créer une base de données collectant un maximum d’articles sur ma ville de Verrières-le -Buisson dans pleins de journaux... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Etienne ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projet ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je souhaite créer une base de données collectant un maximum d’articles sur ma ville de Verrières-le -Buisson dans pleins de journaux différents. Classant les journaux par dates ou types d’événements. J’ai développé une fascination étrange pour ma ville depuis que j’y ai découvert les vidéos d’événements culturelles de celle-ci sur leurs chaîne Youtube. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://www.linternaute.com/ville/verrieres-le-buisson/ville-91645&lt;br /&gt;
&lt;br /&gt;
https://www.leparisien.fr/essonne-91/verrieres-le-buisson-91370/&lt;br /&gt;
&lt;br /&gt;
https://www.francebleu.fr/ile-de-france/essonne-91/verrieres-le-buisson-91645&lt;br /&gt;
&lt;br /&gt;
http://randovlb.org/&lt;br /&gt;
&lt;br /&gt;
https://actu.fr/ile-de-france/verrieres-le-buisson_91645&lt;br /&gt;
&lt;br /&gt;
https://www.rnpc.fr/carte-des-centres-rnpc/region-ile-de-france/centre-rnpc-verrieres-le-buisson/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;/div&gt;</summary>
		<author><name>Etienne</name></author>
	</entry>
</feed>