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 :

Web Crawling : Trouver les mots


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    informatique
    Inscrit en
    Août 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2018
    Messages : 26
    Par défaut Web Crawling : Trouver les mots
    Bonjour,

    Je prépare un Web Crawler.

    Plus précisément, il s'agit d'indexer (= prendre tous les mots) d'une page, et de trouver tous les liens de cette page, pour ensuite chercher les mots (de la page principale) dans les liens extraits.

    Mon problème se trouve dans le fonction indexe() : quand j'essaie de récupérer tous les pages secondaires, après avoir vérifier que le mot ne se trouve pas dans la stoplist (= pronoms, articles, ...etc) et que ces mots sont bien dans les pages_secondaires.

    Voici ce que j'ai fait pour l'instant :

    - Pour extraire tous les liens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import requests 
    from bs4 import BeautifulSoup
     
    def extraire_liens(liens) : 
        page = requests.get(liens).text
        soup = BeautifulSoup(page)
        for link in soup.find_all('a', href=True):
            print(link['href'])
    - Pour laver les pages de toutes les balises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    import re
     
    def nettoie_page(page):
        cleanr = re.compile('<.*?>')
        cleantext = re.sub(cleanr, '', page)
        return cleantext
    - Et pour indexer (c'est le problème) :
    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
     
    def indexe(dex, mots, url):
        for x in url : 
            x = requests.get(x).text
            x = nettoie_page(x)
            x = x.lower()
            x = x.split()                 
     
        for mot in mots:
            mot = mot.lower()
            mot = nettoie(mot)
     
            if mot not in stoplist :
                if mot in x :              
                    print(x)                     # LE PROBLÈME : J'essaie de récupérer les pages secondaires, mais j'obtiens que le dernier lien, (36 fois)
                    ajoute(dex, mot, url)

    - Et la fonction main (fait partie aussi du problème) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    def main(url, idx) :     
        listes_urls = extraire_liens(url)        # Extrait tous les liens de la page principale
        page_princ = requests.get(url).text # Ouvre et extrais la page principale, (celle qui est donnée dans l'argmt)
        page_princ = nettoie_page(page_princ)
        page_princ = page_princ.split()
     
        idx = {}
        indexe(idx, page_princ, listes_urls)
        prd(idx)
    - Et la fonction ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def ajoute(dex, mot, url):
            try:
                dex[mot].append(url)
            except KeyError:
                dex[mot] = [url]

    Merci d'avance pour les personnes qui prendront le temps de m'aider

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,

    Citation Envoyé par Train55 Voir le message
    Mon problème se trouve dans le fonction indexe()
    Et vous espérez qu'on va le deviner?
    Relisez votre code, essayez de comprendre ce qu'il fait et pourquoi c'est différent de ce que vous attendez. Ajoutez des "print" pour afficher le contenu des variables, histoire de les visualiser et vérifier qu'elles sont comme attendu.
    Cela vous permettra de comprendre ce qu'il se passe dans votre code et, si vous n'arrivez pas à le corriger par vous même de mieux décrire le problème.

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2018
    Messages : 4
    Par défaut
    J'ai du mal a comprendre ton problème. Décris le clairement et donne un code mieux structurés pour qu'on comprenne mieux

Discussions similaires

  1. [MySQL] Trouver les mots les plus répétés dans un champ
    Par maxence64 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/05/2011, 13h20
  2. trouver les mots dans une chaine
    Par thierry007 dans le forum VB.NET
    Réponses: 5
    Dernier message: 21/04/2010, 09h30
  3. [RegEx] Trouver les mots entre guillemets
    Par naynay dans le forum Langage
    Réponses: 6
    Dernier message: 20/07/2009, 16h43
  4. Réponses: 59
    Dernier message: 10/11/2007, 11h49
  5. [RegEx] Trouver les mots en majuscule dans une chaine
    Par Boeing dans le forum Langage
    Réponses: 2
    Dernier message: 15/10/2007, 23h44

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