IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Enregistrement dans un fichier Excel à partir une liste


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Webdesigner
    Inscrit en
    Avril 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2005
    Messages : 120
    Points : 93
    Points
    93
    Par défaut Enregistrement dans un fichier Excel à partir une liste
    Bonjour,

    J'arrive pas a enregistrer la data dans un fichier Excel .
    et meme y a des doublon :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    import requests
    from bs4 import BeautifulSoup
    from tqdm import tqdm
    from PIL import Image
    import os
    import xlwt
     
     
    def Rempalcer(textString):
        cle = ['Comparer', '(voir tous les produits)', '(voir tous les articles)']
        for Q in cle:
            while Q in textString:
                textString = textString.replace(Q, '')
        return textString
     
    productlist = []
    def load_product(url,nume):
        page = requests.get(url)
        BS = BeautifulSoup(page.content, 'html.parser')
        getOver = BS.find('section', id='overview').find('table', id='sellers')
        K = getOver.find('tbody').find_all('tr')[1:]
        contImage = BS.find('section', class_='section-images').find_all("img")[-1]
        for e in K:
            Val = e.find('td', class_='table-value').text
            productlist.append(Rempalcer(Val).strip())
        productlist.append(contImage.get("src"))
        download_image(contImage.get("src"),"image_data",nume)
        return productlist
     
     
    links = []
    def load_url(link):
        page = requests.get(link)
        BS = BeautifulSoup(page.content, 'html.parser')
        contPage = BS.find('div', class_='products')
        elems = contPage.find_all('a', class_="title")
        keys = "produit/imprimantes-3d"
        for el in elems:
            link = el.get("href")
            if keys in link:
                links.append(link)
        return(links)
     
     
    def download_image(url, pathname,nume):
        if not os.path.isdir(pathname):
            os.makedirs(pathname)
        data = "www.aniwaa.fr/wp-content/uploads/"
        if data in url:
            response = requests.get(url, stream=True)
            file_size = int(response.headers.get("Content-Length", 0))
            filename = os.path.join(pathname,nume+".png")
            progress = tqdm(response.iter_content(1024), f"Downloading {filename}", total=file_size, unit="B", unit_scale=True, unit_divisor=1024)
            with open(filename, "wb") as f:
                for data in progress:
                    f.write(data)
                    progress.update(len(data))
     
    load_url("https://www.aniwaa.fr/comparatif/imprimantes-3d/?sort=date&order=desc&show=5")
     
     
    workbook = xlwt.Workbook()
    sheet = workbook.add_sheet("Sheet Name", cell_overwrite_ok=True)
    style = xlwt.easyxf('font: bold 1')
     
    # Specifying column
     
    sheet.write(0, 0, 'Id', style)
    sheet.write(0, 1, 'Marque', style)
    sheet.write(0, 2, 'Catégorie', style)
    sheet.write(0, 3, 'Thématique', style)
    sheet.write(0, 4, 'Technologie', style)
    sheet.write(0, 5, 'Matériaux', style)
    sheet.write(0, 6, 'Volume d', style)
    sheet.write(0, 7, 'Date de sortie', style)
    sheet.write(0, 8, 'Pays ', style)
    sheet.write(0, 9, 'Image ', style)
     
    workbook.save("AA.xls")
     
     
    for num in range(len(links)):
        num_ligne = links[num]
        for a in range(len(load_product(num_ligne,str(num)))):
            print(num, a, load_product(num_ligne,str(num))[a] )
            sheet.write(num, a, load_product(num_ligne,str(num))[a] )
            workbook.save("AA.xls")

    Voici un Extrait du Résultat donné :
    Downloading image_data\0.jpg: 0%| | 7.00/6.11k [00:00<00:00, 6.62kB/s]
    Downloading image_data\0.jpg: 0%| | 7.00/6.11k [00:00<00:01, 3.48kB/s]
    Downloading image_data\0.jpg: 0%| | 7.00/6.11k [00:00<00:03, 1.64kB/s]
    1 0 P
    Downloading image_data\0.jpg: 0%| | 7.00/6.11k [00:00<00:06, 993B/s]
    Downloading image_data\0.jpg: 0%| | 7.00/6.11k [00:00<00:06, 1.01kB/s]
    1 1 r
    Downloading image_data\0.jpg: 0%| | 7.00/6.11k [00:00<00:04, 1.56kB/s]
    1 2 o
    Downloading image_data\0.jpg: 0%| | 7.00/6.11k [00:00<00:01, 3.49kB/s]
    Downloading image_data\0.jpg: 0%| | 7.00/6.11k [00:00<00:02, 2.34kB/s]
    Downloading image_data\0.jpg: 0%| | 7.00/6.11k [00:00<00:05, 1.17kB/s]
    1 3 f

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Découpez le problème en plusieurs parties: est ce que les données attendues sont bien récupérées dans link? Est-ce que le contenu de la liste est bien écrit dans le fichier?

    Vérifier que chaque partie du code fait ce qu'on en attend fait partie du boulot... Et si vous rencontrez un problème dans un petit bout, il faut retravailler ce petit bout (en dehors de son contexte) ce qui permet de poster un exemple facile à reproduire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Autre remarque, pandas est bien pratique pour écrire dans des fichiers Excel plutôt que xlwt.
    Pas d'aide par mp.

  4. #4
    Membre régulier
    Homme Profil pro
    Webdesigner
    Inscrit en
    Avril 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2005
    Messages : 120
    Points : 93
    Points
    93
    Par défaut
    Dans la partie de récupération des donnes , ils serent stocker sur une liste , mais il a l'aire de récupérer les adresse a chaque , ce qui est a créer des doublon sur la liste :
    resultat sur console :
    Images attachées Images attachées  

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par NapsterVB Voir le message
    J'arrive pas à resoudre ça , je l'ai conçu à chaque donne d'un url il a ajoute dans une liste.
    Si déjà au départ vous ne récupérez pas les bonnes infos, çà n'ira pas remplir correctement le fichier XL.

    Pour le reste, à vous de vérifier que chaque étape fait ce que vous attendez... Et si çà ne le fait pas, essayer de comprendre ce qu'il se passe plutôt que d'attendre qu'on réfléchisse à votre place.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Candidat au Club
    Homme Profil pro
    Passionné
    Inscrit en
    Mai 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Passionné

    Informations forums :
    Inscription : Mai 2021
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Si cela peut t'aider voici un programme qui permet de récupérer les urls du site que tu souhaites et les pousser dans un fichier texte en les comptants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # Allow to retrieve all of printers references
    from urllib.request import Request, urlopen
    from bs4 import BeautifulSoup
    import ssl
     
    # Ignore SSL certificate errors
    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE
     
    url = Request('https://www.aniwaa.fr/comparatif/imprimantes-3d/?sort=date&order=desc&show=3000', headers={'User-Agent': 'Mozilla/5.0'})
     
     
    # Retrieve all printers references
    count = 0
    webpage = urlopen(url).read()
    soup = BeautifulSoup(webpage, "html.parser")
    for link in soup.find_all('a', class_="title"):
        count = count + 1
        link = link.get('href')
        print(count, link)
        # Allow to write data to .txt - "a" method to populate data in the file without overwritting
        with open("urls.txt", "a") as f:
            print(str(count), link, file=f)
    Et un second programme qui permet de faire du data design pour récupérer les informations essentielles que tu recherches
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    # Allow to browse each links retrieve in test1.py
    import urllib
    from urllib.request import Request, urlopen
    from bs4 import BeautifulSoup
    import ssl
    import requests
    #import openpyxl
    from openpyxl import Workbook
    from openpyxl.utils import get_column_letter
     
    # Ignore SSL certificate errors
    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE
     
    # Way to open a .txt and read it
    fhandle = open("urls_end.txt", "r").read()
    fh = fhandle.split()
    count = 0
     
     
    for http in fh:
        if not http.startswith("https://www.aniwaa.fr/produit/"): continue
        #print(http)
        htt = requests.get(http)
        ht = htt.text
        soup = BeautifulSoup(ht, "html.parser")
        #print(soup)
        table = soup.find(id="sellers", class_="table table-md table-theme")
        #print(table)
     
        try:
            tabltext = table.get_text()
        except AttributeError:
            print("Attribute Error")
     
        tabl = tabltext.strip()
        cnvtlst = tabl.split()
        count = count + 1
     
        try:
            with open("data.txt", "a") as f:
                print(count, 'urls retrieving', cnvtlst, file=f)
                print(count, cnvtlst)
        except:
            print('Fail to retrieve')
    Ensuite tu n'as plus qu'a pousser les données dans une feuille excel si tu le souhaites ou les manipuler pour pouvoir obtenir les informations que tu souhaites. Tu pourras utiliser openpyxl, c'est une librairie plutôt bien documentée et qui fonctionne bien.

    J'espère que cela aura pu t'aider dans ta recherche de données,

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/05/2021, 09h03
  2. Réponses: 1
    Dernier message: 04/06/2011, 07h10
  3. Inscrire des données dans deux fichiers excel a partir d'un userform
    Par creunch dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/09/2010, 11h52
  4. Enregistrer dans un fichier Excel
    Par byubi dans le forum Langage
    Réponses: 7
    Dernier message: 25/03/2009, 16h37
  5. remplacement carré par ; dans un fichier excel crée par une macro
    Par om51ft dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/11/2007, 16h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo