45 votes

Comment faire en sorte que WGET télécharge exactement la même page web html que le navigateur ?

En utilisant un navigateur web (IE ou Chrome), je peux enregistrer une page web (.html) avec Ctl-S, l'inspecter avec n'importe quel éditeur de texte et voir les données sous forme de tableau. Je souhaite extraire l'un de ces nombres, mais pour de très nombreuses pages web, il y en a trop pour le faire manuellement. J'aimerais donc utiliser WGET pour récupérer ces pages web l'une après l'autre, et écrire un autre programme pour analyser le fichier .html et extraire le nombre que je veux. Mais le fichier .html sauvegardé par WGET en utilisant la même URL que le navigateur ne contient pas le tableau de données. Pourquoi ? C'est comme si le serveur détectait que la demande provient de WGET et non d'un navigateur web, et qu'il fournissait une page web squelette, sans le tableau de données. Comment puis-je obtenir exactement la même page web avec WGET ? - Merci beaucoup !

PLUS D'INFORMATIONS :

Voici un exemple de l'URL que j'essaie de récupérer : http://performance.morningstar.com/fund/performance-return.action?t=ICENX&region=usa&culture=en-US où la chaîne ICENX est un symbole de fonds commun de placement, que je remplacerai par l'un des nombreux symboles de fonds communs de placement. Cela permet de télécharger un tableau de données lorsqu'il est affiché dans un navigateur, mais le tableau de données est absent s'il est récupéré avec WGET.

49voto

lemonsqueeze Points 1584

En tant que roadmr wget ne supporte pas le javascript, il se contente d'afficher la page telle qu'elle est reçue du serveur (c'est-à-dire avant l'exécution de tout code javascript) et le tableau est donc manquant.

Vous avez besoin d'un navigateur sans tête qui supporte le javascript comme phantomjs :

$ phantomjs save_page.js http://example.com > page.html

avec save_page.js :

var system = require('system');
var page = require('webpage').create();

page.open(system.args[1], function()
{
    console.log(page.content);
    phantom.exit();
});

Ensuite, si vous voulez juste extraire du texte, le plus simple est de rendre la page avec w3m :

$ w3m -dump page.html

et/ou modifier le script script de phantomjs pour ne déposer que ce qui vous intéresse.

14voto

GowriShankar Points 249

Vous pouvez télécharger le site web complet en utilisant wget --mirror

Exemple :

wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL

La ligne de commande ci-dessus que vous voulez exécuter lorsque vous souhaitez télécharger un site web complet et le rendre disponible pour une visualisation locale.

Options :

  • --mirror active les options adaptées à la mise en place d'un miroir.

  • -p télécharge tous les fichiers nécessaires à l'affichage correct d'une page HTML donnée.

  • --convert-links après le téléchargement, convertir les liens en document pour une visualisation locale.

  • -P ./LOCAL-DIR enregistre tous les fichiers et répertoires dans le répertoire spécifié.

Pour plus d'informations sur les options Wget, lisez cet article : Vue d'ensemble de toutes les commandes wget avec exemples ou vérifier Page de manuel de Wget .

3voto

roadmr Points 32606

Au lieu de --recursive qui se chargera de "scanner" chaque lien de votre URL, utilisez --page-requisites . Il devrait se comporter exactement comme les options que vous décrivez dans les navigateurs graphiques.

       This option causes Wget to download all the files that are
       necessary to properly display a given HTML page.  This includes
       such things as inlined images, sounds, and referenced stylesheets.

       Ordinarily, when downloading a single HTML page, any requisite
       documents that may be needed to display it properly are not
       downloaded.  Using -r together with -l can help, but since Wget
       does not ordinarily distinguish between external and inlined
       documents, one is generally left with "leaf documents" that are
       missing their requisites.

Pour plus d'informations, faites man wget et rechercher le --page-requisites (utilisez "/" pour effectuer une recherche lors de la lecture d'une page de manuel).

2voto

sri Points 446

Si la réponse du serveur diffère en fonction de la source de la demande, c'est principalement en raison de la variable HTTP_USER_AGENT (une simple chaîne de texte) qui est fournie avec une requête de la source de la demande, informant le serveur de la technologie.


  1. Vous pouvez vérifier votre agent de navigation ici -> http://whatsmyuseragent.com

  2. D'après le manuel de WGET, ce paramètre devrait faire l'affaire --user-agent=AGENT .


Si cela ne suffit pas, il se peut qu'un traitement JavaScript soit nécessaire pour obtenir la même page qu'un navigateur, ou peut-être une demande appropriée avec des paramètres GET afin que le serveur prépare une réponse qui ne nécessite pas de JavaScript pour remplir la page.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X