Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

123456789101112131415161718192021
  1. title: Python et HTML
  2. slug: python-html
  3. date: 2016-05-04
  4. chapo: Python n’est le premier langage de personne mais le second langage de tout le monde.
  5. > Python n’est le premier langage de personne…
  6. > …mais le second langage de tout le monde.
  7. *Je ne sais plus où j’ai lu/entendu cette citation mais je la trouve pertinente :-).*
  8. En discutant avec [Karl](http://la-grange.net/karl/) sur [IRC](irc://chat.freenode.net/##openweb), 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](http://docs.python-requests.org/) qui permet de [récupérer des pages](https://github.com/compjour/search-script-scrape) (que vous pouvez [cacher](https://github.com/reclosedev/requests-cache) et [tester](https://github.com/getsentry/responses)) depuis votre code Python avec une API simple. Si vous avez besoin de faire cela depuis la ligne de commande [HTTPie](http://httpie.org) (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](https://github.com/avinassh/status) mais on tombe dans les dangers de la micro-dépendance.
  9. Pour aller plus loin il y a [PyQuery](http://pyquery.readthedocs.io/) qui utilise `lxml` ou [tq](https://github.com/plainas/tq) qui utilise `BeautifulSoup`. Ce dernier retourne aisément du JSON (comme [JamAPI](http://www.jamapi.xyz/)) que vous pourrez analyser avec [jq](https://stedolan.github.io/jq/) sans quitter votre shell (utile également pour [documenter une API](https://www.data.gouv.fr/fr/apidoc/)).
  10. Enfin il y a [Scrapy](http://scrapy.org/) si vous avez besoin de récupérer plus de quelques URL manuellement. Je me demande dans quelle mesure [l’emploi d’asyncio/aiohttp](http://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html) ([cache](/david/cache/44abc2fd416f673b9c6ae0f5147726a9/)) permettrait d’aller [encore plus vite](https://github.com/orf/cyborg) mais [d’après mon expérience](/david/blog/2015/croquer-liens/) le facteur limitant est souvent le temps de réponse du serveur en face…
  11. Pour le contenu d’articles, j’utilise ici [readability-lxml](https://pypi.python.org/pypi/readability-lxml) pour mettre les liens en cache mais j’envisage de passer à [newspaper](http://newspaper.readthedocs.io/), 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](https://github.com/ikreymer/pywb) ou [newsdiffs](https://github.com/ecprice/newsdiffs) qui prennent en compte les versions. Explorer aussi [robobrowser](https://github.com/jmcarp/robobrowser).
  12. J’en oublie sûrement car il est difficile de chercher dans ses étoiles Github. N’hésitez pas à m’envoyer les vôtres.
  13. Karl me propose également [html5lib](http://html5lib.readthedocs.io/).