Notes et astuces sur les systèmes libres basés sur GNU/Linux

Aller au contenu | Aller au menu | Aller à la recherche

dimanche, 11 juillet 2010

Requète Get et Post en Python

Bonjour,

Besoin de récupérer une page html ? remplir un formulaire ? les deux ?
Ce billet est fait pour vous :)

I.Récupération et parsage

Utilisation : On souhaite télécharger une page html accessible sur un serveur Web pour la parser facilement par la suite grâce au langage Python.

1.Connexion au serveur Web et récupération de la page voulue
import httplib

//demande de connexion au serveur
conn = httplib.HTTPConnection("www.toto.com")

//Envoi de la requête GET afin de récupérer www.toto.com/blagues.php
conn.request("GET", "/blagues.php")

// Récupération de la réponse du serveur
response = conn.getresponse()

//Lecture de la reponse
response.read()


2.Mise en forme de la réponse et utilisation

A la place de lire la page dans la sortie standard, on peut la mettre en forme et la stocker proprement.

from lxml import etree
from BeautifulSoup import BeautifulSoup

//Nettoyage de la page
html= etree.HTML(response.read())
result = etree.tostring(html, pretty_print=True, method="html")
soup = BeautifulSoup(result)

Maintenant que nous avons un résultat propre, nous allons pouvoir l'analyser et extraire ce qui nous intéresse.
BeautifulSoup nous permet de rechercher des éléments en fonction de leur nom, leur type et leurs attributs.
Plus d'informations dans la documentation.

Ici je vais chercher un nœud qui a pour attribut "name" et pour valeur "cler".
Par exemple cette balise correspondrait à ma recherche : <balise attr1="toto" name="cler" value="motdepasse" />

cle= soup.find(attrs={"name" :"cler"})

//Récupère la valeur du troisième attribut
value=cle.attrs[2][1]

//value vaudra "motdepasse"



II. Requête POST

Maintenant je souhaite envoyer des données au serveur Web via un formulaire.
Il suffit d'encoder mes données à envoyer puis de les envoyer et enfin attendre la réponse du serveur.

import urllib,urllib2

//URL du formulaire
url = 'http://www.toto.com/sendjoke.php'

//Champ et valeur du formulaire
params = urllib.urlencode({'blague': 'toto va à l'école'})

//Envoi de la requête
req = urllib2.Request(url, params)

//Récupération de la réponse du serveur
response = urllib2.urlopen(req)
data=response.read()
html= etree.HTML(data)

Normalement avec ces briques, vous pouvez :

  • Envoyer les requêtes basiques du HTTP.
  • Nettoyer les pages de leur défauts de conception.
  • Analyser leur contenu efficacement.

That's all folks !!

vendredi, 29 janvier 2010

Communication entre un Python et un Dauphin (MySQL)

Bonjour,

Pour faire communiquer ces deux animaux, c'est facile, il y a une soupe API pour ça.

Il vous faut installer le paquet mysql-python pour bénéficier de l'api _mysql. Sous ArchLinux :

#yaourt -S mysql-python

Pour nous faciliter la vie, une surcouche a été ajouté bien nommée mysqldb.

Exemple :

import MySQLdb # attention à la casse
db=MySQLdb.connect(host="host",user="user",passwd="password",db="base")
c=db.cursor() #définition du curseur
c.execute("""SELECT * FROM video WHERE nomVideo like %s""", (vid)) 
rq=c.fetchone() # stockage du tuple dans une variable
#Affectation variables
idvid=rq[0]
idflux=rq[1]
idep=rq[2]

Voila, juste une petite astuce pour moi, pour vous, on ne sait jamais.

Source : Sourceforge

That's all Folks.