Skip to content

Repo projet 2 - Formation OC Developpeur application - Python

Notifications You must be signed in to change notification settings

maticha84/OC_P2_Repo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 

Repository files navigation

OC_P2_Project

Repo projet 2 - Formation OC Developpeur application - Python

Introduction

Ce projet a pour objectif de récupérer tous les éléments des livres, par catégorie, se trouvant sur le site http://books.toscrape.com/.
Les éléments récupérés par livre sont :

product_page_url : l'url de la page du livre
universal_product_code : le code produit UPC
title : le titre du livre
price_including_tax : le prix du livre incluant la taxe
price_excluding_tax : le prix hors taxe
number_available : le nombre d'exemplaires disponibles
product_description : la description du livre (le résumé)
category : la catégorie du livre
review_rating : la version du livre
image_url : l'url de l'image du livre \

A l'exécution du fichier main.py, plusieurs fichiers seront créés :

  • un dossier nommé Lists of Categories est créé là où sera exécuté le fichier main.py.
  • dans ce dossier, un fichier csv par catégorie est créé.
  • dans ce dossier, un dossier par catégorie est créé (de la forme 'category_pictures'), il contient pour chaque catégorie les images des livres de la catégorie.

Format du dossier books

Dans le dossier books se trouvent 3 fichiers nécessaires à l'éxecution du projet :

Fichier book.py

Dans ce fichier se trouve la fonction search_info_page permettant de scrapper un seul livre. Le but est de récupérer les informations de ce livre dans un fichier csv. On en profite pour récupérer l'image du livre par la même occasion.
Si ce fichier est exécuté directement, il génère un csv du livre pour lequel le fichier à été lancé. (l'url exemple pris dans ce fichier est la suivante : http://books.toscrape.com/catalogue/eragon-the-inheritance-cycle-1_153/index.html)

Fichier category.py

Ce fichier a pour but de scroller tous les livres d'une catégorie définie afin de permettre de récupérer tous les éléments pour chaque livre de la catégorie dans un fichier csv.
Si ce fichier est lancé directement, il permet de générer le csv de la catégorie Mystery Exemple de la catégory Mystery : http://books.toscrape.com/catalogue/category/books/mystery_3/index.html\ Pour fonctionner, il nécessite l'import du fichier book.py.
Dans ce fichier, on trouve 3 fonctions disctinctes :

  • search_info_category(soupCat) : permet de récupérer le nom de la catégorie que l'on est en train de scroller.
    soupCat : paramètre obligatoire de la fonction, contenant le résultat de la commande BeautifulSoup sur la réponse à la requète sur l'url de la catégorie.
  • search_tab_category(soupCat,urlCat) : Cette fonction permet de rechercher tous les livres en fonction du nombre de pages dans la catégorie. Elle retourne un tableau contenant la liste des URL des livres de la catégorie srollée. Elle prend en compte le fait que la catégorie s'affiche sur une ou plusieurs pages. soupCat : paramètre obligatoire de la fonction, contenant le résultat de la commande BeautifulSoup sur la réponse à la requète sur l'url de la catégorie.
    urlCat : paramètre obligatoire de la fonction, c'est l'url de la catégorie.
  • crea_csv_by_category(category,listBooks,urlsite) : Cette fonction permet de récupérer dans un fichier csv du nom de la catégorie la liste des éléments de chaque livre de la catégorie.
    Pour fonctionner, elle s'appuie sur la fonction search_info_page du module book.py Le fichier csv se créera dans un dossier 'List of Categories'.
    category : paramètre obligatoire, retour de la fonction search_info_category(soupCat)
    listBooks : paramètre obligatoire, retour de la fonction search_tab_category(soupCat,urlCat)
    urlsite : paramètre obligatoire, url du site (ici http://books.toscrape.com/)

Fichier books_by_category.py

Dans ce fichier se trouve une unique fonction research_all_category(urlsite,soupUrlSite).
Cette fonction permet de rechercher toutes les pages de catégorie. elle retourne un tableau avec les urls des pages de chaque catégorie.
urlsite : paramètre obligatoire, l'url du site (ici http://books.toscrape.com/)
soupUrlSite : paramètre obligatoire de la fonction, contenant le résultat de la commande BeautifulSoup sur la réponse à la requète sur l'url du site

Fichier parallel_work.py

Dans ce fichier se trouve la déclaration de la classe ParallelWorkGlobal(Thread),permettant la mise en place de parallèlisation entre les exécutions des différentes catégories.
Mis en place dans le main.py, cela permet d'exécuter la recherche par catégorie en simultanée, et de diminuer le temps d'execution de plus de 17 min à moins de 3 min.

Lancement du scrapping

Pour pouvoir utiliser le projet, il vous faudra au préalable récupérer l'intégralité du dossier OC_P2_Projet. Dans ce dossier, vous trouverez :

  • le dossier books
  • le fichier __init__.py (qui est vierge)
  • le fichier main.py
  • le fichier requirements.txt

Dans un premier temps, vous devrez avoir installé si ce n'est pas encore le cas, les modules présents dans le fichier requirements.txt, dans votre environnement python.
Ensuite, executez avec python le fichier main.py. A l'exécution du fichier main.py, plusieurs fichiers seront créés :

  • un dossier nommé Lists of Categories est créé là où sera exécuté le fichier main.py.
  • dans ce dossier, un fichier csv par catégorie est créé.
  • dans ce dossier, un dossier par catégorie est créé (de la forme 'category_pictures'), il contient pour chaque catégorie les images des livres de la catégorie.

Le temps d'exécution est d'environ 2min30. Le détail s'affiche dans la console d'exécution du script. En fin de programme, le temps d'exécution s'affiche.

La mise en place du parralèlisme d'exécution (thread et queue fifo), permet une optimisation du temps d'execution, car 10 catégories sont scrappées en simultanée.

About

Repo projet 2 - Formation OC Developpeur application - Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages