web_read
¶
Lecture d'une page web : texte principal, titre et dates déclarées.
21 septembre 2026 : « Qui est le premier ministre du Canada ? » — web_search rendait cinq extraits (brave, région ca-fr) dont AUCUN ne disait qui est le titulaire : des bouts pris au hasard dans les pages Wikipédia « Premier ministre du Canada », « Mark Carney », « Justin Trudeau », « Liste des Premiers ministres ». Le 9b a répondu « Justin Trudeau [3] ». Le corps de fr.wikipedia.org/wiki/Premier_ministre_du_Canada, lui, porte dans l'infobox la ligne « Titulaire actuel | Mark Carney | depuis le 14 mars 2025 » et dans le premier vrai paragraphe « Mark Carney, le premier ministre actuel, a prêté serment le 14 mars 2025, après la démission de Justin Trudeau ».
Le mode « URL dans la requête » de web_search (WebSearchTool._fetch_url)
ne pouvait pas le lire : un <[^>]+> sur tout le HTML rend 6 000
caractères de menu et de bandeau cookies, jamais le corps. D'où cet outil :
la zone principale une fois le bruit retiré, les blocs en ordre de document,
les lignes de tableau jointes par « | » (text_content() collait
« Titulaire actuelMark Carneydepuis le 14 mars 2025 »), et les dates prises
là où la page les déclare — jamais devinées (§5 du cahier : une date que la
page ne porte pas n'existe pas).
Revue du 21 septembre au soir, contre des pages réelles et des pages
piégées : le bruit était retiré sans regarder s'il ENGLOBAIT le contenu
(body.has-sidebar de WordPress, le <form> unique d'ASP.NET) et la
page revenait vide, en succès ; <header> était du bruit même dans un
<article>, et le patron HTML5 le plus courant perdait son titre et sa
date ; une bombe gzip matérialisait 67 Mo d'un seul morceau ; un serveur qui
goutte était lu 50 s dans un fil que l'exécuteur avait abandonné. Chaque
correction porte sa date dans le code.
Classes¶
Page
dataclass
¶
Ce qu'une page déclare : dates en AAAA-MM-JJ ou "", texte une ligne par bloc.
PageIllisible
¶
Bases: ValueError
Le HTML ne peut pas être lu en entier ; le message se rend tel quel.
Functions:¶
date_iso
¶
AAAA-MM-JJ, ou "" pour tout ce qui n'est pas une date sans ambiguïté.
« 06/17/2016 - 20:07 » (pm.gc.ca, 21/09) est refusé : on ne sait pas si c'est juin ou le 17e mois. La date d'un instant horodaté est gardée telle que déclarée, sans passer au fuseau du poste : c'est ce que la page dit.
Source code in src/diapason/tools/web_read.py
zone_principale
¶
L'élément qui porte le corps de la page, débarrassé du bruit.
Travaille sur une COPIE du document : retirer les