Comment obtenir le texte d'une page en utilisant wget sans html?

17

Si j'essaie wget sur une page Web, je reçois la page en html. Est-il possible de récupérer uniquement le texte d'un fichier sans html associé? (Ceci est requis pour moi car certaines des pages HTML contiennent le programme c est téléchargé avec des balises html. Je dois l'ouvrir dans le navigateur et copier manuellement le texte pour créer un fichier .c.)

Champignons lunaires
la source
1
En fait, c'est possible, mais vous devez écrire une fonction qui analysera le code de la page et l'enregistrera sous .c. Ce n'est pas difficile, mais cela dépend de la structure de la page. Si vous fournissez un lien, quelqu'un vous aidera avec le code exact. Sinon sedou perlsont vos amis.
précipiter le

Réponses:

26

wgetne récupérera que le document. Si le document est en HTML, ce que vous voulez est le résultat de l'analyse du document.

Vous pouvez, par exemple, utiliser lynx -dump -nolist, si vous avez du lynx autour.

lynxest un navigateur Web léger et simple, doté de la -dumpfonction, utilisé pour afficher le résultat du processus d'analyse. -nolistévite la liste des liens à la fin, qui apparaîtra si la page contient des hyperliens.

Comme mentionné par @Thor, elinkspeut également être utilisé pour cela, car il a également une -dumpoption (et doit -no-referencesomettre la liste des liens). Cela peut être particulièrement utile si vous parcourez un site en utilisant -sigh- frames (MTFBWY).

En outre, gardez à l'esprit que, à moins que la page ne soit vraiment qu'un code C avec des balises HTML, vous devrez vérifier le résultat, juste pour vous assurer qu'il n'y a rien de plus que du code C.

njsg
la source
5

Si vous n'avez pas installé ces autres outils, seulement wget, et que la page n'a pas de formatage juste du texte brut et des liens, par exemple du code source ou une liste de fichiers, vous pouvez supprimer le HTML en utilisant sed comme ceci:

wget -qO- http://address/of/page/you/want/to/view/ | sed -e 's/<[^>]*>//g'

Cela utilise wget pour vider la source de la page vers STDOUT et sed pour supprimer toutes les paires <> et tout ce qui les sépare.

Vous pouvez ensuite rediriger la sortie de la commande sed vers le fichier que vous souhaitez créer en utilisant>:

wget -qO- http://.../ | sed -e 's/<[^>]*>//g' > downloaded_file.txt

NB: Vous pouvez trouver qu'il a un espace supplémentaire dans le fichier que vous ne voulez pas (par exemple, les lignes sont en retrait de quelques colonnes)

Il peut être plus facile d'utiliser votre éditeur de texte pour ranger le fichier (ou un formateur source lorsque vous téléchargez le code source C).

Si vous devez faire la même chose simple pour chaque ligne du fichier, vous pouvez inclure une commande pour le faire dans la commande sed (en supprimant ici un espace de tête):

wget -qO- http://.../ | sed -e 's/<[^>]*>//g;s/^ //g' > downloaded_stripped_file.txt
JohnGH
la source
3

juste pour ajouter un autre outil. Je préfère w3m, qui est un lynxnavigateur de console similaire. Vous voudrez peut-être vérifier ce qui est déjà disponible sur votre système.

w3m -dump website.html
McPeppr
la source