4.1 KiB
Sommaire
Un webcrawler pour extraire les arrêtés de péril du site de Marseille
Les données sont inscrites manuellement sur le site de la mairie, et présentent de nombreux problèmes de structure et de nomemclature qui empêchent d'extraire proprement chaque arrêté.
On a donc recours à plusieurs regex successifs et un peu de code pour séparer les adresses et obtenir une table structurée. Certaines adresses sont perdues en chemin (environ une cinquantaine) mais l'essentiel est extrait.
Les données sont ensuite classées par type (périls & périls imminents, main-levées, interdictions d'occupation, etc.).
Il est ensuite possible d'en éditer une carte, sur Qgis par exemple, en retrouvant chaque adresse par geocoding.
Le code repose sur le projet libre de webcrawler Scrapy écrit en python.
Structure :
-
crawler/perils/spiders/scraperil.py: Le crawler initial qui récupère toutes les données brutes du site par des requêtes via sélecteurs XPATH (similaires aux selecteurs CSS mais plus polyvalents) -
crawler/perils/items.py: Les items dans lesquels sont inscrites les données brutes -
crawler/perils/splittermidware.py: La pipeline de tri des données brutes au moyen de regex et d'un peu de python rudimentaire. Le code est commenté pour inspection.
Installation
Linux/Unix/MacOs (Posix compliant)
Dépendances
- Python >=3.5
Environnement virtuel et modules python
Environnement virtuel
Mise en place d'un environnement virtuel pour scrapy dans lequel seront installées les dépendances :
python -m venv scrapy-env
source scrapy-env/bin/activate
Modules
python -m pip install --upgrade pip
python -m pip install regex
python -m pip install scrapy
Windows
L'utilisation de Windows est déconseillée.
Dépendances
-
Microsoft Visual C++ Build-tools
Ces modules doivent être installés :

-
Librairie libxml2 (documentation en haut de page, à priori ça s'installe via pip mais j'ai pas eu besoin, faudrait voir sur un windows vierge ce que ça donne)
Environnement virtuel et modules python
Environnement virtuel
Mise en place d'un environnement virtuel pour scrapy dans lequel seront installées les dépendances :
python -m venv scrapy-env
scrapy-env\Scripts\activate.bat
Modules
python -m pip install --upgrade pip
python -m pip install regex
python -m pip install scrapy
Usage
On exporte l'output du crawler dans un fichier csv.
D'autres formats sont disponibles (json, xml, etc.) plus d'informations sur la documentation de scrapy
Toujours dans l'environnement virtuel scrapy-env (pour toute utilisation non consecutive à l'installation, voir la deuxième ligne de la mise en place de l'environnement dans la section Installation pour réactiver l'environnement virtuel)
cd src
scrapy crawl perils -O perils.csv
TODO
- Permettre la possibilité de deux outputs : un csv pour Qgis et un csv pour consultation et mise en page. Pour le moment les deux sortent sur un même csv parce-que j'ai pas pris le temps de m'en occuper.
- installer ça sur un serveur et faire crawler quotidiennement puis mettre sur une base de données (mariadb)
