issue154:python
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
issue154:python [2020/03/04 08:29] – d52fr | issue154:python [2020/03/05 14:46] (Version actuelle) – andre_domenech | ||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
My eighth article for Full Circle back in FCM#34 (February 2010) was about creating a very small and generic cookbook database. The fact that it is 10 years to the month since I first wrote about the database program hasn't escaped me.** | My eighth article for Full Circle back in FCM#34 (February 2010) was about creating a very small and generic cookbook database. The fact that it is 10 years to the month since I first wrote about the database program hasn't escaped me.** | ||
- | Comme peuvent le savoir beaucoup d' | + | Comme peuvent le savoir beaucoup d' |
- | Mon huitième article, dans le numéro 34 du FCM (février 2010) parlait de la création d'une toute petite base de données générique de cuisine. Le fait que ça fait 10 ans ce mois-ci | + | Mon huitième article, dans le numéro 34 du FCM (février 2010) parlait de la création d'une toute petite base de données générique de cuisine. Le fait que, ce mois-ci, ça fait 10 ans que j'ai commencé à parler de cette base de données, ne m'a pas échappé. |
**Anyway, I've started re-writing the program, pretty much from scratch, and again using Page as the GUI designer. I wanted to give it a newer, sleeker look, with a nicer interface, and there have been many things that i've wanted to add for years, but just never got around to doing. Things like adding a way to have a picture of the finished product, a way to grab a recipe from one of the many recipe websites I search, and more. | **Anyway, I've started re-writing the program, pretty much from scratch, and again using Page as the GUI designer. I wanted to give it a newer, sleeker look, with a nicer interface, and there have been many things that i've wanted to add for years, but just never got around to doing. Things like adding a way to have a picture of the finished product, a way to grab a recipe from one of the many recipe websites I search, and more. | ||
Ligne 11: | Ligne 11: | ||
While I'm still in the process of development and the UI is still somewhat in flux, I'm pretty proud of the new look and feel. Here's a quick screenshot of the main form of the program.** | While I'm still in the process of development and the UI is still somewhat in flux, I'm pretty proud of the new look and feel. Here's a quick screenshot of the main form of the program.** | ||
- | Quoiqu' | + | Quoiqu' |
- | Alors que je suis encore | + | Bien que je sois toujours |
**As I said, one of the things that I was both excited and worried about was the webpage scraper. I've tried writing a generic scraper before with limited success, but never could wrap my head around it properly. Part of the problem was that other things with a higher priority level would come up just as I was starting to be comfortable with the process, and I would have to put the project on hold. By the time I got around to revisiting the project, I had to spend a good while trying to remember what I was doing and how I had done it. I ended up so frustrated I started searching the web for some tips and tricks that others posted that might give me a leg up on my learning process.** | **As I said, one of the things that I was both excited and worried about was the webpage scraper. I've tried writing a generic scraper before with limited success, but never could wrap my head around it properly. Part of the problem was that other things with a higher priority level would come up just as I was starting to be comfortable with the process, and I would have to put the project on hold. By the time I got around to revisiting the project, I had to spend a good while trying to remember what I was doing and how I had done it. I ended up so frustrated I started searching the web for some tips and tricks that others posted that might give me a leg up on my learning process.** | ||
- | Comme je l'ai dit, l' | + | Comme je l'ai dit, l' |
**I stumbled upon a really nice project called " | **I stumbled upon a really nice project called " | ||
Ligne 23: | Ligne 23: | ||
Let's look at how to install the library and utilize it.** | Let's look at how to install the library and utilize it.** | ||
- | Je suis tombé sur un beau projet appelé « recipe-scrapers » qui semblait | + | Je suis tombé sur un beau projet appelé « recipe-scrapers » qui semblait |
Regardons comment installer et utiliser la bibliothèque. | Regardons comment installer et utiliser la bibliothèque. | ||
Ligne 35: | Ligne 35: | ||
$ pip install -e .** | $ pip install -e .** | ||
- | Le dépôt est situé à https:// | + | Le dépôt est situé à https:// |
$ pip install recipe-scrapers | $ pip install recipe-scrapers | ||
- | Vous pouvez aussi cloner ou télécharger le dépôt et, une fois qu'il est sur votre machine, aller dans le dossier principal (recipe-scrapers) | + | Vous pouvez aussi cloner ou télécharger le dépôt et, une fois qu'il est sur votre machine, aller dans le dossier principal (recipe-scrapers) et utiliser pip pour l' |
$ pip install -e | $ pip install -e | ||
Ligne 57: | Ligne 57: | ||
Maintenant, ouvrez votre environnement de développement (IDE) ou votre éditeur préféré et créez un nouveau fichier. Appelons-le « scrapertest.py ». | Maintenant, ouvrez votre environnement de développement (IDE) ou votre éditeur préféré et créez un nouveau fichier. Appelons-le « scrapertest.py ». | ||
- | Bien sûr, la première chose que vous devez faire est d' | + | Bien sûr, la première chose que vous devez faire est d' |
from recipe_scrapers import scrape_me | from recipe_scrapers import scrape_me | ||
- | Ensuite, vous aurez besoin d'une page de recette que vous voudrez extraire. Vous devrez en trouver une qui soit simple, pas une page de catégories. Pour ce tutoriel, nous utiliserons une page de Allrecipes.com qui fournit la recette asiatique du Canard à l' | + | Ensuite, vous aurez besoin d'une page de recette que vous voudrez extraire. Vous devrez en trouver une qui soit simple, pas une page de catégories. Pour ce tutoriel, nous utiliserons une page de Allrecipes.com qui fournit la recette asiatique du Canard à l' |
**The next thing that we should do is create a variable to hold the URL of the site page... | **The next thing that we should do is create a variable to hold the URL of the site page... | ||
Ligne 75: | Ligne 75: | ||
Note: Some scrapers may provide more or less information depending on the site and if the author of the scraper included it.** | Note: Some scrapers may provide more or less information depending on the site and if the author of the scraper included it.** | ||
- | La chose suivante à faire est de créer une variable qui contient l'URL de la page du site... | + | Ensuite, il faut créer une variable qui contient l'URL de la page du site : |
site = ' | site = ' | ||
- | Maintenant, nous créons une instance de l' | + | Maintenant, nous créons une instance de l' |
scraper = scrape_me(site) | scraper = scrape_me(site) | ||
- | Une fois fait, nous pouvons commencer à fouiller dans les informations que l' | + | Une fois fait, nous pouvons commencer à fouiller dans les informations que l' |
Note : certains extracteurs fournissent plus ou moins d' | Note : certains extracteurs fournissent plus ou moins d' | ||
Ligne 91: | Ligne 91: | ||
When we run the program, the output looks like that shown on the next page, top.** | When we run the program, the output looks like that shown on the next page, top.** | ||
- | À partir du code ci-dessus, nous serons capable d' | + | À partir du code ci-dessus, nous serons capable d' |
Quand nous lançons le programme, la sortie ressemble à celle montrée sur la page suivante, en haut. | Quand nous lançons le programme, la sortie ressemble à celle montrée sur la page suivante, en haut. | ||
Ligne 108: | Ligne 108: | ||
With this small change, our output now looks like that shown far right.** | With this small change, our output now looks like that shown far right.** | ||
- | Il est évident que les ingrédients ressortent comme un liste Python ; aussi, changeons un peu le programme pour améliorer la lisibilité des données. Commentez la ligne qui imprime la liste comme une « globale » et remplacez-la par... | + | Il est évident que les ingrédients ressortent comme une liste Python ; aussi, changeons un peu le programme pour améliorer la lisibilité des données. Commentez la ligne qui imprime la liste comme une « globale » et remplacez-la par : |
# print(f' | # print(f' | ||
Ligne 132: | Ligne 132: | ||
Be sure to indent the rest of the code so that it all falls under the if statement.** | Be sure to indent the rest of the code so that it all falls under the if statement.** | ||
- | Maintenant, améliorons un peu le programme pour permettre à un utilisateur d' | + | Maintenant, améliorons un peu le programme pour permettre à un utilisateur d' |
- | site = input(' | + | site = input (' |
if site != '': | if site != '': | ||
Ligne 150: | Ligne 150: | ||
With a bit more cleanup of the output portion of the code, it will be pretty nice. However, what happens when you enter a website that is not one of the sites that is supported by the library? Let’s look by trying a site that I know is not supported (below) https:// | With a bit more cleanup of the output portion of the code, it will be pretty nice. However, what happens when you enter a website that is not one of the sites that is supported by the library? Let’s look by trying a site that I know is not supported (below) https:// | ||
- | Pour ce test, nous utiliserons une autre page de recettes bien connue, à nouveau sur Allrecipes.https:// | + | Pour ce test, nous utiliserons une autre page de recettes bien connue, à nouveau sur Allrecipes. |
+ | https:// | ||
- | Maintenant, quand vous lancez le programme | + | Maintenant, quand vous lancez le programme |
- | Avec un peu plus d' | + | Avec un peu plus d' |
**This error is easy to avoid. All of the sites that are supported are stored in a dictionary named SCRAPERS. What we will want to do is grab the domain from the URL and see if it is in the SCRAPERS dictionary. We can do that by importing the urlparse library… | **This error is easy to avoid. All of the sites that are supported are stored in a dictionary named SCRAPERS. What we will want to do is grab the domain from the URL and see if it is in the SCRAPERS dictionary. We can do that by importing the urlparse library… | ||
Ligne 164: | Ligne 165: | ||
Again, be sure to match the indentation level of the rest of the code. Finally, at the very end of the code, add the following two lines (below).** | Again, be sure to match the indentation level of the rest of the code. Finally, at the very end of the code, add the following two lines (below).** | ||
- | Cette erreur est facile à éviter. Tous les sites qui sont supportés sont stockés dans un dictionnaire nommé | + | Cette erreur est facile à éviter. Tous les sites qui sont supportés sont stockés dans un dictionnaire nommé |
from urllib.parse import urlparse | from urllib.parse import urlparse | ||
Ligne 170: | Ligne 171: | ||
Assurez-vous de la placer tout en haut du fichier, juste sous l' | Assurez-vous de la placer tout en haut du fichier, juste sous l' | ||
- | À nouveu, vérifiez la bonne correspondance du niveau d' | + | À nouveau, vérifiez la bonne correspondance du niveau d' |
**Now when you run the program, using the unsupported URL, you’ll see the following… | **Now when you run the program, using the unsupported URL, you’ll see the following… | ||
Ligne 181: | Ligne 182: | ||
That’s it.This base code can be easily worked into a GUI form as well. Here’s a shot of what my GUI scraper form looks like.** | That’s it.This base code can be easily worked into a GUI form as well. Here’s a shot of what my GUI scraper form looks like.** | ||
- | Maintenant, quand vous lancez | + | Maintenant, quand vous lancerez |
Merci de saisir le site Web à extraire (laissez vierge pour quitter) -> | Merci de saisir le site Web à extraire (laissez vierge pour quitter) -> | ||
Ligne 187: | Ligne 188: | ||
Désolé, ce site Web n'est pas supporté actuellement. | Désolé, ce site Web n'est pas supporté actuellement. | ||
- | Voilà. Cette base de code peut facilement être travaillée aussi dans une interface graphique. Voici une vue de ce à quoi ressemble mon extracteur en mode graphique. | + | Voilà. Cette base de code peut facilement être mise dans une interface graphique. Voici une vue de ce à quoi ressemble mon extracteur en mode graphique. |
**As I usually do, I’ve put the code up on Pastebin at https:// | **As I usually do, I’ve put the code up on Pastebin at https:// |
issue154/python.1583306966.txt.gz · Dernière modification : 2020/03/04 08:29 de d52fr