Python et HTML

Python n’est le premier langage de personne…
…mais le second langage de tout le monde.

Je ne sais plus où j’ai lu/entendu cette citation mais je la trouve pertinente :-).

En discutant avec Karl sur IRC, je me rends compte qu’il y a tout un tas d’outils en Python permettant d’interagir avec HTML. Le plus évident et assez bas niveau est requests qui permet de récupérer des pages (que vous pouvez cacher et tester) depuis votre code Python avec une API simple. Si vous avez besoin de faire cela depuis la ligne de commande HTTPie (qui est une surcouche de requests) remplace curl ou wget avec brio. Si vous avez besoin de comparer des codes HTTP, il y a status mais on tombe dans les dangers de la micro-dépendance.

Pour aller plus loin il y a PyQuery qui utilise lxml ou tq qui utilise BeautifulSoup. Ce dernier retourne aisément du JSON (comme JamAPI) que vous pourrez analyser avec jq sans quitter votre shell (utile également pour documenter une API).

Enfin il y a Scrapy si vous avez besoin de récupérer plus de quelques URL manuellement. Je me demande dans quelle mesure l’emploi d’asyncio/aiohttp (cache) permettrait d’aller encore plus vite mais d’après mon expérience le facteur limitant est souvent le temps de réponse du serveur en face…

Pour le contenu d’articles, j’utilise ici readability-lxml pour mettre les liens en cache mais j’envisage de passer à newspaper, il faudrait que je teste ce que ça donne sur la soupe de tags de Medium (au passage si vous utilisez ce service en espérant un jour pouvoir récupérer vos contenus en HTML réutilisable, essayez aujourd’hui). Pour aller plus loin dans le domaine, il y aurait PyWb ou newsdiffs qui prennent en compte les versions. Explorer aussi robobrowser.

J’en oublie sûrement car il est difficile de chercher dans ses étoiles Github. N’hésitez pas à m’envoyer les vôtres.

Karl me propose également html5lib.