web-dev-qa-db-fra.com

Comment faire pour que WGET télécharge exactement la même page Web que le navigateur

Utilisation d'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 afficher les données sous forme de tableau. Un de ces chiffres que je veux extraire, mais pour beaucoup, beaucoup de pages Web, trop pour être fait manuellement. J'aimerais donc utiliser WGET pour obtenir ces pages Web l'une après l'autre et écrire un autre programme pour analyser le fichier .html et récupérer le numéro que je veux. Mais le fichier .html enregistré par WGET lors de l'utilisation de la même URL que le navigateur ne contient pas la table de données. Pourquoi pas? C'est comme si le serveur détectait que la demande venait de WGET et non d'un navigateur Web et fournissait une page Web squelette, sans la table de données. Comment puis-je obtenir exactement la même page Web avec WGET? - THX!

PLUS D'INFORMATIONS:

Voici un exemple d’URL que j’essaie d’extraire: http://performance.morningstar.com/fund/performance-return.action?t=ICENX&region=usa&culture=en-US où la chaîne ICENX est un symbole boursier des fonds communs de placement, que je changerai pour l’un des nombreux symboles boursiers. Cela télécharge une table de données lorsqu'il est affiché dans un navigateur, mais la table de données est manquante si elle est extraite avec WGET.

33
user239598

Comme roadmr noté, le tableau de cette page est généré par javascript. wget ne prend pas en charge javascript, il vide simplement la page telle qu'elle a été reçue du serveur (c'est-à-dire avant tout code javascript) et le tableau est manquant.

Vous avez besoin d'un navigateur sans navigateur prenant en charge javascript, tel que 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 seulement extraire du texte, le plus simple serait de rendre la page avec w3m:

$ w3m -dump page.html

et/ou modifiez le script phantomjs pour simplement vider ce qui vous intéresse.

39
lemonsqueeze

Vous pouvez télécharger un site Web complet à l'aide de wget --mirror

Exemple:

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

La ligne de commande ci-dessus que vous souhaitez exécuter lorsque vous souhaitez télécharger un site Web complet et mise à disposition pour un affichage local.

Options:

  • --mirror active les options appropriées pour la mise en miroir.

  • -p télécharge tous les fichiers nécessaires pour afficher correctement une page HTML donnée.

  • --convert-links après le téléchargement, convertissez les liens dans le 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: Présentation de toutes les commandes wget avec exemples , ou cochez la case page de manuel de Wget .

10
GowriShankar

Au lieu de --recursive, qui ira juste de l'avant et "spider" chaque lien dans votre URL, utilisez --page-requisites. 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, utilisez man wget et recherchez l'option --page-requisites (utilisez "/" pour effectuer une recherche en lisant une page de manuel).

3
roadmr

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


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

  2. Selon le manuel WGET, ce paramètre devrait exécuter le travail --user-agent=AGENT.


Si cela ne vous aide pas, c'est-à-dire qu'un traitement JavaScript peut être nécessaire pour obtenir la même page qu'un navigateur, ou une requête appropriée avec des paramètres GET afin que le serveur prépare une réponse ne nécessitant pas l'utilisation de JavaScript pour remplir la page.

2
Esamo

Il y a le paramètre --recursive. Il téléchargera tout, parfois plus que ce que vous voulez.

wget --recursive http://url.com
0
Braiam