Différences entre les versions de « ERG::datagrab »
Ligne 18 : | Ligne 18 : | ||
[[Fichier:1datagrab 24 09 18.png]] | [[Fichier:1datagrab 24 09 18.png]] | ||
− | + | Sélectionner les blocs de textes de description. | |
Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML. | Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML. | ||
On télécharge et on installe Beautiful Soup. | On télécharge et on installe Beautiful Soup. | ||
− | Dans un éditeur de texte (comme Notepad++) on essaye d'ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque | + | Dans un éditeur de texte (comme Notepad++) on essaye d'ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque. |
− | Problème d'encodage des caractères : le script Beautiful Soup n'arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia | + | Problème d'encodage des caractères : le script Beautiful Soup n'arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia. |
+ | En fait le problème venait du terminal qui n'arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt. | ||
==Session du 08/09/2018== | ==Session du 08/09/2018== | ||
− | Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d'input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet | + | ===Partie "Grab"=== |
+ | Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d'input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet d'encoder une suite d'adresses URL de wiki et le programme va les chercher sur le net et en télécharge le code html. Le script python qui "grab" (va chercher) les datas et les mets dans une variable (ou ici un fichier .txt) est terminé: | ||
+ | |||
+ | <syntaxhightlight lang="Python"> | ||
+ | import urllib | ||
+ | from bs4 import BeautifulSoup | ||
+ | |||
+ | #list of urls we use as source material | ||
+ | |||
+ | urls=['https://en.wikipedia.org/wiki/Soup', | ||
+ | 'https://en.wikipedia.org/wiki/Rain'] | ||
+ | |||
+ | #we request each of those url in a 'htmls' list | ||
+ | htmls=[] | ||
+ | for url in urls: | ||
+ | html = urllib.urlopen(url) | ||
+ | htmls.append(html.read()) | ||
+ | |||
+ | #we create a 'soup' html parser objet for every html page requested | ||
+ | soup=[] | ||
+ | for html in htmls: | ||
+ | soup.append(BeautifulSoup(html, 'html.parser')) | ||
+ | |||
+ | #we put all the text between the <p> markups of those html in a .txt file | ||
+ | text = [] | ||
+ | with open('text.txt', 'w') as f: | ||
+ | for sp in soup: | ||
+ | for tag in sp.find_all('p'): | ||
+ | text.append(tag.get_text()) | ||
+ | f.write(tag.get_text().encode("utf-8")) | ||
+ | </syntaxhighlight> |
Version du 8 octobre 2018 à 07:55
Data grab
Session du 24/09/2018
Objectif
À partir de la page wikipédia Liste de écoles d'art en Belgique. Sur base des écoles d'art à Bruxelles construire un générateur de page wiki d'école d'art.
Étapes
- Télécharger les pages Wikipédia des écoles d'arts de Bruxelles
"Enregistrer sous", "Page web, complète" en HTML
- Faire un programme qui va chercher les descriptions des pages des écoles d'arts pour mélanger ces textes et faire une sorte de description "moyenne" aléatoire d'une école d'art bruxelloise.
Pour ça on a besoin de javascript dans la page HTML que l'on va ouvrir à la fin. Javascript permet de faire une requête Ajax pour utiliser un programme en Python. C'est ce programme qui va faire tout le boulot, il va chercher dans le dossier les pages HTML que l'on a téléchargées, les analyser pour trouver seulement le texte de description (pas les balises, ni les titres ou les listes par exemple). Ensuite grâce à javascript ce programme va afficher le résultat dans une page HTML. À chaque fois que l'on ouvre le fichier HTML, une page aléatoire est générée à partir de la base de données que l'on a fourni au départ.
Sélectionner les blocs de textes de description. Il faut une bibliothèque pour que Python puisse analyser (parser) le contenu de la page HTML. On télécharge et on installe Beautiful Soup. Dans un éditeur de texte (comme Notepad++) on essaye d'ouvrir une page HTML dans Pyhton grâce cette nouvelle bibliothèque. Problème d'encodage des caractères : le script Beautiful Soup n'arrive pas à lire certains caractères UTF-8 qui sont présents dans la page Wikipédia. En fait le problème venait du terminal qui n'arrive pas à afficher certain caractères, pas de soucis si on les mets juste dans un variable ou si on écris dans un fichier .txt.
Session du 08/09/2018
Partie "Grab"
Plutôt que de pré-télécharger dans un dossier les pages .html qui servent d'input au script, on utilise urllib: une librairie python qui permet de faire des requêtes http. Cela permet d'encoder une suite d'adresses URL de wiki et le programme va les chercher sur le net et en télécharge le code html. Le script python qui "grab" (va chercher) les datas et les mets dans une variable (ou ici un fichier .txt) est terminé:
<syntaxhightlight lang="Python"> import urllib from bs4 import BeautifulSoup
- list of urls we use as source material
urls=['https://en.wikipedia.org/wiki/Soup', 'https://en.wikipedia.org/wiki/Rain']
- we request each of those url in a 'htmls' list
htmls=[] for url in urls: html = urllib.urlopen(url) htmls.append(html.read())
- we create a 'soup' html parser objet for every html page requested
soup=[] for html in htmls: soup.append(BeautifulSoup(html, 'html.parser'))
- we put all the text between the
markups of those html in a .txt file
text = [] with open('text.txt', 'w') as f: for sp in soup: for tag in sp.find_all('p'): text.append(tag.get_text()) f.write(tag.get_text().encode("utf-8")) </syntaxhighlight>