Module `crawler` - Hexoplanete/Projet-Furet GitHub Wiki
Correspond au dossier
src/furet/crawler
Le crawler a pour objectif de se rendre sur les divers sites préfectoraux afin de récupérer les liens vers les PDF des RAA à partir d’une certaine date définie dans le fichier de configuration ci-dessous.
Les sites gouvernementaux sur lesquels les requêtes sont faites ont mis en place des protections qui semblent basées sur les comportements pour détecter les bots et autres crawlers similaires à celui-ci. Ce crawler simule les requêtes à la façon d’un navigateur web pour éviter la détection, mais sera tout de même bloqué au bout d’un certain nombre de requêtes.
On pourrait faire un crawler capable de changer d’IP ou de signature à chaque requête pour éluder les systèmes de protection, mais cela revient à utiliser des tactiques pouvant ressembler trop fortement à celles des acteurs malveillants. Dans un souci d’éthique et pour éviter les bannissements, ce module crawler sera désactivé dans le programme final et n’est laissé ici qu’en guise de Proof-of-Concept.
La recherche et le téléchargement des PDF devra donc être fait à la main, puis le fichier devra être chargé dans l’application.
Si d'éventuelles personnes reprennent un jour le projet, elles devront trouver une façon alternative de récupérer les arrêtés pour réintégrer la partie crawler.
Structure du dossier crawler
configCrawler.json
: contient la configuration des différents départements implémentés, plus précisément la date de récupération la plus récente.
{
"regions": {
"GrandEst": {
"departments": {
"Aube": "09/05/2025"
}
},
"Occitanie": {
"departments": {
"HautesPyrenees": "11/05/2025",
"Ariege": "09/05/2025",
"Gers": "07/05/2025"
}
...
resultCrawler.json
: contient le résultat du crawling, soit un lien de téléchargement pour chaque PDF, ainsi que la date de publication, la région et le département correspondant.
{
"links": [
{ "link": "https://www.sarthe.gouv.fr/contenu/telechargement/24518/153473/file/recueil-12-05-2025-recueil-des-actes-administratifs.pdf",
"datePublication": "12/05/2025",
"region": "PaysDeLaLoire",
"department": "Sarthe"
},
{ "link": "https://www.pas-de-calais.gouv.fr/contenu/telechargement/81356/511400/file/Recueil des actes administratifs n\u00b0123 en date du 09 mai 2025.pdf",
"datePublication": "09/05/2025",
"region": "HautsDeFrance",
"department": "PasDeCalais"
}
]
}
Le module de traitement accèdera ensuite à chacun des liens pour télécharger le PDF et commencer l’analyse du recueil.
crawler.py
: la classe principale et chef d’orchestre du module de crawling, elle s’occupe de lire le fichier configCrawler.json
, initialise les spiders de département en conséquence, créé tous les threads afin de paralléliser toutes les recherches de liens et renvoie la liste des résultats.
Dossier regions
spider.py
: la classe de base de tous les bots web, contient les fonctions de base (voir code pour le détail des fonctions et attributs), notamment la mise à jour des recueils les plus récents, les requêtes GET aux différents sites gouvernementaux, le téléchargement des PDF, la mise en place des résultats dans resultCrawler.json
, et la fonction crawl qui lance les fonctions spécifiques à chaque département.
{region}.py
: pour chaque grande région française, on a un fichier Python et les différentes classes filles de spider.py
à l’intérieur, qui correspondent chacune à un département différent. Chaque département possède son URL personnalisée (la page d'accueil des RAA), et deux fonctions principales spécifiquement customisées pour chaque site, dont la structure change d’un département à l’autre :
findPages(...)
, qui à partir de l’URL de base va chercher toutes les pages contenant des liens de téléchargement intéressants. Une optimisation sur l’année et/ou le mois est effectuée à cette étape si possible (par exemple, si le lien actuel le plus récent date de 2025, ce n’est pas la peine de garder les pages plus anciennes).extractLinks(...)
, qui à partir des pages récupérées précédemment extrait les liens vers les PDF. À cette étape, on ne garde que les liens dont la date de publication est supérieure à la date de téléchargement la plus récente.