robots.txt

Historiquement, un fichier texte posé à la racine d’un serveur Web, nommé robots.txt, est une pseudo norme supposée déclarer le comportement toléré de la part des agents logiciels le visitant.

Grand amateur de scraping, je connais cette norme mais elle ne m’est d’utilité que pour refuser à mes intermédiaires certaines taches. Au fond je ne les respecte pas. Je suis même surpris que cette idée perdure. A vrai dire, je n’ai jamais participé à un site sur lequel ce serait une préoccupation.

L’idée est de lister les URLs autorisées/interdites. Le format de ce fichier fait même en sorte qu’il soit possible de décrire des politiques différentes robot part robot (agent par agent).

Imaginons un site public (administration d’Etat). Accepterions nous ouvertement qu’il procède à des distinctions agent par agent ? Discriminations non acceptables. Notons que j’ai vu un paquet de sites répondant à de tels critère mettre en place des restrictions type captcha sur des fichiers type robots.txt ou même des flux RSS !

Derrière chaque robot/agent il y a une personne/structure. Cela en ferait un sous-citoyen ? On ne scrape pas pour assouvir un désir malsain d’accrétion. On le fait globalement pour des traitements postérieurs que l’on aurait autrement fait sur des jeux de données, sous réserve qu’ils soient d’accès intelligibles et techniquement raisonnables. Surtout sur des sites étatiques. 

Je fais ce focus sur des sites publics car ils sont plus loin de ces parties du web où la monétisation par la publicité s’impose (?!?), et car ils sont redevables aux citoyens dont ils relèvent. 

Ce n’est pas un plaidoyer contre les distinctions droïds/humains, ni browser/agents. La distinction logiciels/agents est de plus en plus complexe. Un proxy vaut il un script à fin d’accessibilité, un curl pour archivage ?

Un dernier mot sur la tendance actuelle qui est de passer de jeux de données à des API publiques. Je n’ai pas de religion sur ce point mais au final j’aime que les cohabitent et que cela n’exclue pas le scraping.

Resistance is futile.