Récupérer un page internet générée en javascript

La récupération d’une page internet avec un script python peut parfois être incomplète en utilisant les bibliothèques classiques. Certaines page peuvent être générée coté client notamment avec du javascript. Nous allons voir une méthode pour remédier à ça.

Dans un précédent article (Importer une page web en python), les limites de cette méthode apparaissent lorsque la page est générée par un script javascript, c’est à dire que les donnée ne sont pas envoyées directement par le serveur mais rapatrié par le navigateur de l’internaute (ce site par exemple).

<!doctype html>
<!--[if IE]><![endif]-->
<html lang="fr">
<!-- version : 2016.4.2+6 -->
<!-- build date : 14/11/2016 17:56 -->
    <head>
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
        <base href="/turf/">
        <!--[if IE]><script>
            // Fix for IE ignoring partial base tags
            (function() {
                var baseTag = document.getElementsByTagName('base')[0];
                baseTag.href = baseTag.href;
            })();
        </script><![endif]-->
        <meta charset="UTF-8">
        <meta name="description" content="Pmu.fr vous conseille dans vos paris. Pmu.fr on parie que vous allez gagner !">
        <meta name="keywords" content="PMU, Tirelire, course, Quinté+, Multi, Tiercé, 2sur4, Couplé, parier, paris, hippiques, pariez spot, Pari football, paris sportifs, pari sportif, poker, Texas hold'em">
        <title>Turf, Courses Hippiques, Courses en direct - PMU</title>
        <link href="1479142588161_css/images/favicon.ico" rel="shortcut icon" type="image/x-icon">
        <!--[if IE 9]>
		<link href="1479142588161_css/styles-ie9.dist1.css" rel="stylesheet" type="text/css">
		<link href="1479142588161_css/styles-ie9.css" rel="stylesheet" type="text/css">
		<![endif]-->
		<!--[if !IE]>-->
		<link href="1479142588161_css/styles-online.css" rel="stylesheet" type="text/css">
		<!--<![endif]-->
		<script src="1479142588161_require.js"></script>
    </head>
<!--[if IE 9]>
<body class="ie ie9">
<![endif]-->
<!--[if !IE]>-->
<body>
<!--<![endif]-->
        <script src="conf/config-env.js"></script>
        <script src="conf/config-app.js"></script>
        <script>
            require.config({
                baseUrl: 'conf'
            });
        </script>
        <script src="1479142588161_app.js"></script>
    </body>
</html>

Il suffit de faire un clique droit et de voir le code source pour s’apercevoir que le code source ne reflète pas ce qui est vu.

Nous allons donc utiliser une autre méthode qui vont nécessité quelques installation de bibliothèques.

Installation des bibliothèques requises

Cette méthode utilise la bibliothèque dryscrape (site de la documentation en anglais). Il existe d’autres solutions dont la bibliothèque BeautifulSoup et PyQt4. Je propose celle que je trouve la plus simple.

Dans un terminal, exécuter :

sudo apt-get install qt5-default libqt5webkit5-dev build-essential python-lxml python-pip xvfb
sudo pip install dryscrape

L’installation s’exécute correctement.

Script python pour récupérer le code source

Dans un fichier recup.py, saisir :

#!/usr/bin/python3
# -*-coding:Utf-8 -*

import dryscrape
import re

dryscrape.start_xvfb()

# ouverture de la session
sess = dryscrape.Session()
# Nous n'avons pas besoin des images
sess.set_attribute('auto_load_images', False)

# visite du site
sess.visit('https://www.pmu.fr/turf/')

#Récupération de la page dans la variable reponse
reponse = sess.body()

#On ne récupére que le contenu du body de la page
corps = re.findall(r'<body>(.*)</body>',reponse,re.S)

#On affiche dans le terminal le contenu du body
print corps

Je ne mets pas le résultat de la fonction print car le contenu est immense et très peu lisible (pas de saut de ligne).

Si vous aimez, n’hésitez pas à partager et à commenter (même si vous aimez moins).

Laisser un commentaire