-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Proposition de design alternatif #58
Comments
Quelques ajouts/précisions sur les fonctionnalités "core" d'OpenScraper :
Les problèmes principaux à date
Pistes complémentaires
Conclusion (temporaire et pour ouvrir la discussion)
|
Hello ! Super discussion, très éclairante sur les enjeux autour d'OpenScraper. Je vois deux sujets:
Pour chaque sujet, voici les priorités que j'identifie:
Je pense que (2) est plus important que les questions de remontée des erreurs sur les spiders et que la question de leur versionnement en base de données ou via des fichiers. Pour vous donner une idée de ce que j'imagine:
Aujourd'hui, je crois deviner deux points faibles d'OpenScraper: le côté monolithique de Bien sûr, il faut trouver une solution pour injecter les A terme, il n'est pas inimaginable que ce soit OpenScraper lui-même qui propose cet outil de saisie des Je vois trois façons pour la discussion de rester dans une impasse:
L'OpenScraper actuel a permis de collecter des milliers d'infos sur plein de sites: ç'aurait été impossible à la main ou en demandant aux acteurs de le faire dans les temps impartis! Maintenant il y a deux temporalités: à court terme, le souci de la mise à jour des spiders, à moyen terme l'évolution d'OpenScraper comme solution pour son futur deuxième utilisateur. Je suis disponible pour en parler avec vous la semaine prochaine - il y a certainement beaucoup de naïveté dans mon approche, ce sera plus facile de me déniaiser en IRL :) |
... petit suivi et réflexions complémentaires questions d'UX
générique / ad hoc / service saas...
OpenScraper comme projet
réflexions / synthèse d'étape
note sur les utilisateur.rice.s identifié.e.s
|
...et bien sûr je suis dispo IRL aussi pour en discuter :) |
Merci pour ton retour ! (Je pense que la liste des utilisateurs identifiés ne devrait pas être publique...) Ta réponse éclaircit beaucoup de choses pour moi: tu présentes OpenScraper comme un projet qui n'a pas de mainteneur, faute de moyens pour cette maintenance. D'accord avec toi pour le point central sur l'adéquation entre les outils et les moyens humains: je pense que c'est aussi ce qui a initialement motivé les remarques de @DavidBruant. Cette adéquation est à trouver de deux côtés: celui du CIS (premier utilisateur d'OpenScraper en "production") et celui du (futur) mainteneur d'OpenScraper. Dans l'idéal, tout s'aligne: le CIS porte un effort de réflexion sur l'UX porté aussi par la structure qui maintient OpenScraper, ou bien fait du développement fusionné upstream par l'équipe d'OpenScraper. Mais il y a aussi la possibilité que tout ne s'aligne pas. Donc d'accord avec ta proposition de redéfinition du problème: à mon avis, cela mérite une issue à part, car le problème posé par l'issue initialement ouverte par @DavidBruant reste entier. See you IRL! |
L'image qui me vient est qu'un projet open source ressemble un peu à un groupe de jazz : on peut improviser, faire un boeuf, avoir des guests, des demandes du public, avoir un groupe temporairement ou un noyau de musiciens plus constitutif... mais au final c'est mieux de se trouver une identité ou/et des standards|répertoire avec lesquels jouer (ici la vision du projet) si on veut faire quelque chose de vaguement mélodieux pour l'audience... |
La cathédrale, le bazar et le blue note ;) |
J'ai ouvert une issue sur la maintenance. To be continued. |
Ecrire cette issue a été compliquée parce qu'il y avait beaucoup de problèmes différents mélangés J'ai extrait deux choses que je considère être des problèmes dans des issues séparées : #61 et #62 |
Description du problème
Cette section ne décrit que ce que j'ai compris du problème. J'invite les lectrice.eur.s à compléter avec ce que je n'ai pas compris
Le Carrefour des Innovations Sociales (CIS) est un moteur de recherche qui recence les projets d'innovations sociales en France
Plutôt que de composer sa base de données ex nihilo, le CIS est composé d'un collectif de partenaires (environ 30 actuellement, nombre en croissance) qui fournissent les données
Plutôt que d'essayer de demander à chaque partenaire sa base de données, puis de travailler à l'uniformiser, la stratégie adoptée par le CIS a été de scrapper les sites des partenaires afin de composer rapidement le moteur de recherche
Afin que le moteur de recherche soit à jour, le scraper doit être lancé régulièrement automatiquement
OpenScraper se veut être le morceau de la solution qui va chercher les données chez les partenaires et les uniformise avant traitement puis affichage
Description de la solution actuelle
OpenScraper contient un client et un serveur
Le serveur stocke dans une base de données MongoDB :
Le serveur fait aussi tourner le scraper
Le client n'est qu'une interface utilisateur qui rend plus agréable de configurer open scraper, décider quand lancer un scrapping, prévisualiser le résultat, mais n'a pas de code "intelligent"
Singularités
OpenScraper hardcode l'idée que l'on sera toujours dans une des deux configurations :
Les Xpath fournis sont appliqués à la fois sur la "page listing" et la "page projet", donc les données sont mélangées si les XPath s'appliquent dans les deux cas (comme dans le site de Coorace)
Les mêmes Xpath sont appliqués à toutes les pages sans exceptions possibles
Une spider est un document dans une base de données Mongo
Entre autres choses, cela signifie qu'elle est dépendante d'une version d'OpenScraper et aussi qu'elle n'est pas versionnée par défaut (contrairement à si la spider était un fichier de code Python ou autre)
Le code des spider est unique et stocké dans
masterspider.py
(actuellement ~1400 lignes de code)Process de création et modification de spider
masterspider.py
) si le site ne correspond pas aux pré-supposés hardcodésPour la modification, pareil que le process de création à part que 3 est une copie manuelle de la version en production
Dans les deux cas, le gros du temps est passé dans l'étape 4
Dangers associés à utiliser le même code pour toutes les spiders
L'étape 4.2 n'est pas systématique, mais est nécessaire dès que l'on cherche à scrapper un site qui ne correspond pas aux pré-supposés du fichier
masterspider.py
. Cela arrive toutefois assez régulièrement et il est impossible de prévoir quel nouveau site va nécessiter de modifier à nouveaumasterspider.py
Chaque nouveau cas est souvent résolu par l'ajout d'une nouvelle option dans l'interface de configuration de la spider. La liste des options est condamnée à ne faire que croître sans que personne ne puisse savoir jusque quand, car enlever une option pourrait casser une spider dépendant de cette option
De par le fait que
masterspider.py
est le même code utilisé pour toutes les spiders, le modifier est un exercice périlleux, car le modifier pour faire marcher une spider comporte le risque de casser une ou plusieurs autres spiders. Ce risque pourrait être réduit par la présence de tests automatisés, mais il n'y en a actuellement aucunA noter que ce risque pèse sur l'instance du Carrefour des Innovations Sociales, mais pèse sur toutes les instances futures d'OpenScraper : il est possible que dans une future version d'OpenScraper,
masterspider.py
soit modifié d'une manière qui casse les spiders de l'instanceAucun retour direct sur les erreurs durant le scrap
L'étape 4.3 est actuellement assez difficile, car beaucoup d'erreurs sont possibles, mais l'outil ne les fait pas remonter facilement. Erreurs possibles :
€
)On ne se rend compte de ces erreurs que dans des messages dans la console (qui contient beaucoup de messages) ou en constatant que nos attentes ne sont pas satisfaites en inspectant les données récupérées manuellement
Ce process est aussi limité, surtout quand le scrapper ramène des centaines ou milliers de résultats
Pourtant ces erreurs arrivent avec des causes diverses :
Ces causes sont fréquentes. Même les redesign. Si on imagine qu'un site procède à un redesign tous les 5 ans, alors en moyenne, sur 30 partenaires, l'un d'eux fait un redesign tous les 2 mois. Il est donc fréquent de devoir réécrire des spiders cassées pour redesign
Aussi, en relançant la spider régulièrement, il sera découvert des nouvelles pages qui ne correspondent parfois pas aux attentes de la spider
Aujourd'hui la boucle de feedback d'essayer des XPath, de constater que quelque chose ne va pas, de comprendre pourquoi avant de réessayer est un processus très manuel et long
Le problème ne va être que plus visible et douloureux quand il va s'agir de laisser OpenScraper tourner tout seul pour se mettre à jour automatiquement
Description d'une autre solution possible
Spider en tant que code
Si chaque spider était son propre fichier de code, elle pourrait être versionnée (donc avoir l'histoire des changements), n'avoir qu'une faible dépendance au cœur d'OpenScraper (ou une dépendance forte, mais choisie et non imposée comme actuellement). Elle serait moins fragile aux changements d'OpenScraper. Le cœur d'OpenScraper pourrait être beaucoup plus petit et donc plus facile à maintenir
Chaque spider pourrait aussi être facilement testée par des tests automatisés
Copier une spider ne serait plus un jeu de copier/coller entre la prod et le dév, mais juste un
git push
et ungit pull
Cette approche aurait un bonus supplémentaire pour les instances qui souhaitent être open source qui pourraient partager leur code contrairement à l'approche actuelle où la configuration de la spider et ses XPath est cachée dans une base de donnée MongoDB
Chemin de transition pour le Carrefour des Innovations Sociales
masterspider.py
pour le momentmasterspider.py
avec la configuration JSONQuand une nouvelle spider est à créer, la créer "de zéro"
Quand une spider est à refaire, réécrire le code "de zéro" sans utiliser
masterspider.py
"de zéro" est mis entre guillemet, car il est ok dans ce cas-là de copier/coller du code, par exemple de
masterspider.py
, en le nettoyant pour ne garder que les morceau utile à ce site spécifiqueS'il est nécessaire de traiter un cas non-prévu par l'actuel
masterspider.py
, le.a développeur.euse aura accès à tout Python pour le faireOpenScraper pourra fournir des classes et fonctions qui facilitent la vie d'écriture de spider. L'utilisation de ces fonctions et classes dans une spider sera optionnel
Assistance d'OpenScraper dans la gestion des erreurs
A chaque fois que l'on fait tourner une spider ("en test" ou "en vrai"), il s'agit d'un run. Il serait possible qu'OpenScraper, pour chaque run, stocke toute l'activité utile :
OpenScraper pourrait contenir un écran qui affiche les résultats d'un run en mettant en avant les erreurs rencontrées
Pour les erreurs de contenu qui ne se conforme pas aux attentes, il pourrait être possible de manuellement accepter (un par un ou par groupe) que les contenus soient publiés
Si trop d'erreurs sont rencontrées, les données récupérées dans le run sont mises dans un espace temporaires et ne sont pas publiées. Une revue humaine est nécessaire pour validation. L'intervention d'un.e développeur.euse est peut-être nécessaire
Chemin de transition pour le Carrefour des Innovations Sociales
Rien de spécial, il s'agit d'une nouvelle fonctionnalité qui peut être ajoutée en complément du design actuel
Piste alternative et complémentaire
Au vu du travail conséquent que demande de maintenir OpenScraper et les spiders, rencontrer les partenaires pour voir si une solution alternative au scrapping est possible est peut-être une bonne piste
Cette piste peut être menée en parallèle d'un redesign d'OpenScraper
The text was updated successfully, but these errors were encountered: