Skip to content
Snippets Groups Projects

Crawler

Installation

Ce projet utilise Python 3.11

pip install -r requirements.txt

Fonctionnement

Une fois le fichier de référentiel généré, une commande permet de moissoner :

  • un ensemble de collections / source
  • une source directement avec ses collections
  1. récuperation des données

retourne une liste de collections

  1. processus de crawl

Exemple

python3 manage.py crawl -pid ALL -source ELIBM -username username
python3 manage.py crawl -pid PID -source ELIBM -username username

Données initiales

Les données de références se trouvent dans /data/all_cols.json le fichier contient l'ensemble des collections, avec leurs sources respectives.

Ce fichier provient initialement d'un fichier excel. Si besoin de mettre à jour le fichier json, la conversion ods -> json s'effectue en deux étapes :

# Transformation d'un fichier ods en csv
libreoffice --convert-to csv --outdir . all_cols.ods
# Transformation du fichier csv en json
python manage.py convert_all_cols -i "all_cols.csv" -o "all_cols.json"

Contribuer

Installation

Les tests de ce repository sont stockés dans de gros fichiers JSON. Afin de les télécharger, veuillez installer l'extension git lfs.

Installer git lfs n'est nécessaire que si vous souhaitez utiliser ou modifier les tests.

# Sous Ubuntu
apt install git-lfs

Cloner le repo avec git

git clone https://gricad-gitlab.univ-grenoble-alpes.fr/mathdoc/ptfs/ptf-app-crawler
cd ptf-app-crawler
git lfs install
git lfs pull

Tests

Les tests se situent dans le dossier src/crawler/tests. Pour chaque source, les fonctions testées sont les suivantes : parse_collection_content parse_issue_content crawl_article

Afin de limiter les régressions lors du développement, un jeu de données est généré préalablement. Celui ci contient les entrées et sorties de ces fonctions au moment de sa génération.

Attention: introduire un bug durant la génération de ces fichiers signifie que les tests valideront le bug. Il est nécessaire de ne pas considérer les tests comme une source de vérité.

Lancement des tests

Installer les paquets

pip install -r requirements-test.txt

Lancer les tests

pytest -v src/crawler

Génerer les données

Un script python permet de générer les données de tests pour des collections, issues et articles, à la fois prédéfinis et pris au hasard. Voir le fichier src/crawler/tests/data_generation/generate_test_data.py pour plus de détails.

Générer toutes les données de test

python src/crawler/tests/data_generation/generate_test_data.py

Génerer les données de test pour une ou plusieurse sources uniquement

python src/crawler/tests/data_generation/generate_test_data.py LOFPL EUDML

Regénérer les données de test pour une ou plusieurse sources

Cette commande est très utile dans les cas où un fix est rajouté à une source : elle permet de voir le diff.

python src/crawler/tests/data_generation/generate_test_data.py --keep LOFPL EUDML

Si nécessaire, il est possible de marquer une fonction comme "non testable" et faire ignorer la génération de données pour celle ci. Le décorateur from crawler.tests.data_generation.decorators import skip_generation peut être utilisé dans ces cas là

from crawler.tests.data_generation.decorators import skip_generation

class AmsCrawler(BaseCollectionCrawler):
    # [...]

    @skip_generation
    def parse_collection_content(self, content):
        xissues = []
        # [...]
        return xissues

Guideslines

Lors qu'un article ne possède pas de PDF, nous ne voulons pas afficher l'article sur Geodesic.

Les fichiers .ps ne sont pas des pdf. Les articles ne fournissant que un fichier .ps doivent être ignorés.

Deployment

Environment variables

Environment variable Default
REQUESTS_CACHE_LOCATION "/requests_cache"
REQUESTS_USER_AGENT "Geodesic/1.0.0-beta"
REQUESTS_EMAIL "accueil@listes.mathdoc.fr"
REQUESTS_INTERVAL 90

REQUESTS_CACHE_LOCATION

Only used in celery workers or during development.

Path where the crawler will store HTTP cache.

REQUESTS_USER_AGENT

Only used in celery workers or during development.

Value of the User-Agent header sent in HTTP requests.

REQUESTS_EMAIL

Only used in celery workers or during development.

Value of the From header sent in HTTP requests.

REQUESTS_INTERVAL

Seconds to wait between two HTTP requests