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