Executer du javascript sous python
Le crawling est un de mes passe-temps favoris, j’aime bien analyser le code des autres, voir leur petites astuces, piquer des données ici et là ;). quelques fois sur des sites où les données sont vraiment le coeur du business, les liens voir meme des données sont cryptés via des fonctions javascript ex:
<a href=”#” onclick="xxxx('LeVtIJpEJCIQeVsSVuWyUvkUdkWMkUoKK3WxfWiEdKWfGVzCQriSCVIIVWwJEStQlcVQMVQqnEJCnVBxyezsqilzsxdh')">page 2</a>
Le problème c’est que les crawlers n'exécutent pas du javascript, donc impossible de savoir où va ce lien sans le décrypter en javascript, ma première façon de faire était de reproduire la fonction de décryptage en python. Cette méthode devenait rapidement très lourde à maintenir, jusqu’à ce que je découvre python-spidermonkey.
Python-spidermonkey est tout simplement un pont vers spidermonkey, ce qui veut dire qu’on peut exécuter des fonctions javascript avec du python, ou même mixer entre les 2 langages (passer des variables du python au js ...). voici comment ça se passe.
>>> import spidermonkey
>>> rt = spidermonkey.Runtime()
>>> cx = rt.new_context()
>>> func = cx.execute('function(val) {return val*2}')
>>> func(3)
6
Il suffit alors d'appeller la fonction de décryptage et le tour est joué.
Pour les fans du php il existe un bridge spidermonkey pour php aussi http://pecl.php.net/package/spidermonkey/0.1.4.
A bientôt ;).

