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
- 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
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'])
- 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 import re def nettoie_page(page): cleanr = re.compile('<.*?>') cleantext = re.sub(cleanr, '', page) return cleantext
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) :
- Et la fonction ajoute :
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)
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![]()
Partager