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:
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:
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:
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:
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:
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 :D