Extraction sous-chaines page web
Résolu
p_tony
Messages postés
74
Date d'inscription
Statut
Membre
Dernière intervention
-
p_tony Messages postés 74 Date d'inscription Statut Membre Dernière intervention -
p_tony Messages postés 74 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche le moyen de récupéré 4 informations dans une page web que je récupère déjà en local
Il s'agit de la page d'info de mon imprimante, dont je veux extraire le status des cartouches d'encres, le status de l'imprimante et le nombre total de pages imprimées.
Pour les status, je sais que je peux le déterminer à partir des icones de status affichés dans la page (icon_status_normal.gif = normal, icon_status_warning.gif = warning, etc...)
mais enfaite je suis un peu perdu entre sed, awk, ou grep.
Ce que je voudrais au final, c'est des variables black_ink_status, color_ink_status, printer_status, total_pages
edit:
Bon, je tatonne lentement:
Voici un extrait épuré (c'est plus digeste) du html de la page
Je cherche le moyen de récupéré 4 informations dans une page web que je récupère déjà en local
Il s'agit de la page d'info de mon imprimante, dont je veux extraire le status des cartouches d'encres, le status de l'imprimante et le nombre total de pages imprimées.
Pour les status, je sais que je peux le déterminer à partir des icones de status affichés dans la page (icon_status_normal.gif = normal, icon_status_warning.gif = warning, etc...)
cat $PAGE_PATH | grep "/icon_status_"me permet déja de filtrer un peu pour obtenir:
var blackInkStatusImage="./gif/icon_status_normal.gif"; var colorInkStatusImage="./gif/icon_status_normal.gif"; <img src="http://192.168.0.11/gif/icon_status_normal.gif" border="0" align="absmiddle" alt="Ready" title="Ready"/> <img src="http://192.168.0.11/gif/icon_status_normal.gif" border="0" align="absmiddle" alt="Ready" title="Ready" />
mais enfaite je suis un peu perdu entre sed, awk, ou grep.
Ce que je voudrais au final, c'est des variables black_ink_status, color_ink_status, printer_status, total_pages
edit:
Bon, je tatonne lentement:
cat $PAGE_PATH | sed -nr 's#.+/icon_status_([a-z]+).*#\1#p'me renvoie
normal normal normal normal
Voici un extrait épuré (c'est plus digeste) du html de la page
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <!-- document type --> <head> <!-- Backend page info intialization --> <title> HP Officejet J6400 series 192.168.0.11 </title> <script language="JavaScript" type="text/javascript"> <!-- add in specific javascript functions here var blackink=70; var blackInkStatusImage="./gif/icon_status_normal.gif"; var colorink=70; var colorInkStatusImage="./gif/icon_status_normal.gif"; --> </script> <!-- specific html head page --> </head> <body> <!-- #################################################### ####################################################--> <!-- user information --> <table cellpadding="0" cellspacing="0" border="0" width="100%" summary="This table is used to display the device network information."> <tr> <td class="status"> Status: <img src="http://192.168.0.11/gif/icon_status_normal.gif" border="0" align="absmiddle" alt="Ready" title="Ready"/> Ready </td> </tr> </table> <!-- #################################################### ####################################################--> <div class="statusPane"> <h5> Device: </h5> <table cellpadding="0" cellspacing="0" class="dataTable" id="tableDeviceDetails" width="100%"> <tr> <td class="info"> Total Page Count </td> <td> 313 </td> </tr> </table> </div>
A voir également:
- Extraction sous-chaines page web
- Web office - Guide
- Supprimer page word - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Comment traduire une page web - Guide
- Capture page web - Guide
3 réponses
hello
comme ça ?
comme ça ?
$ awk -F "[ =/]*" '/var.*status/ {split($6, a, "[_.]"); print $3, a[3]}' fichier.html
blackInkStatusImage normal
colorInkStatusImage normal
$
essayer ça
$ awk '/var.*status/ {split($2, a, "[=/._]"); print a[1], a[7]}' fichier.htmlavec page count
blackInkStatusImage normal
colorInkStatusImage normal
$ awk '/var.*status/ {split($2, a, "[=/._]"); print a[1], a[7]} /Total/ {getline; getline; getline; print $1}' fichier.html
blackInkStatusImage normal
colorInkStatusImage normal
313
Voici la source html , dont j'ai enlever quelques infos et les lignes vides: https://pastebin.com/ue0yENcN
Bon j'ai trouvé ça pour les satus des cartouches et de l'imprimante:
Question subsidiaire:
Pourquoi, je ne peux pas modifier mon message original pour y ajouter de nouvelles infos ?
:/
BLACK_INK_STATUS=$(cat $PAGE_PATH | sed -nre 's#.+/icon_status_([a-z]+).*#\1#p' | sed -n '1p' ) COLOR_INK_STATUS=$(cat $PAGE_PATH | sed -nre 's#.+/icon_status_([a-z]+).*#\1#p' | sed -n '2p' ) PRINTER_STATUS=$(cat $PAGE_PATH | sed -nre 's#.+/icon_status_([a-z]+).*#\1#p' | sed -n '3p' ) echo $BLACK_INK_STATUS; echo $COLOR_INK_STATUS; echo $PRINTER_STATUS
normal normal normal
Question subsidiaire:
Pourquoi, je ne peux pas modifier mon message original pour y ajouter de nouvelles infos ?
:/
Nickel, c'est ce que je cherché :)
Je vais l'utilisais comme ça:
Je ne pense qu'il doit y'avoir mieux plus selectionne la 2ere 2eme ou 3eme ocuurence, mais en attendant ça fait le boulot :).
Merci pour votre aide.
Je vais l'utilisais comme ça:
BLACK_INK_STATUS=$(cat $PAGE_PATH | sed -rn 's#.+/icon_status_([^.]+).*#\1#p' | sed -n '1p' ) COLOR_INK_STATUS=$(cat $PAGE_PATH | sed -rn 's#.+/icon_status_([^.]+).*#\1#p' | sed -n '2p' ) PRINTER_STATUS=$(cat $PAGE_PATH | sed -rn 's#.+/icon_status_([^.]+).*#\1#p' | sed -n '3p' ) TOTAL_PRINTED_PAGES=$( cat $PAGE_PATH | sed -rn '/Page Count/{n;n;n;s/ *//p}'
Je ne pense qu'il doit y'avoir mieux plus selectionne la 2ere 2eme ou 3eme ocuurence, mais en attendant ça fait le boulot :).
Merci pour votre aide.
Ce coup de fatigue que j'ai eu ^^'
Et sinon au final je pars sur
Le
Je pense qu'il doit y avoir mieux pour sélectionner la 1ere 2eme ou 3eme occurrence, mais en attendant ça fait le boulot :).
Et sinon au final je pars sur
BLACK_INK_STATUS=$(sed -rn 's#/icon_status_([^.]+).*#\1#p' $PAGE_PATH | sed -n '1p') COLOR_INK_STATUS=$(sed -rn 's#/icon_status_([^.]+).*#\1#p' $PAGE_PATH | sed -n '2p') PRINTER_STATUS=$( sed -rn 's#/icon_status_([^.]+).*#\1#p' $PAGE_PATH | sed -n '3p') TOTAL_PRINTED_PAGES=$(sed -rn '/Page Count/{n;n;n;s/ *//p}' $PAGE_PATH)
Le
cat $PAGE_PATHn'est peut-être pas utile enfaite :)
Je vais préciser, mais du coup j'ai un doute sur le sens de ta question.
Pour les status, je sais que je peux le déterminer à partir des icones de status affichés dans la page:
- icon_status_normal.gif = normal,
- icon_status_warning.gif = warning,
cela veut dire qu'à certains endroits j'ai des chaines
desquelles je veux extraire la sous-chaine entre et ... soit ici .
Sinon pour le nombre total de pages, c'est ici le nombre (313) dans le tableau:
Pour le normal (en parsant le code source de la page) :
Pour le status et le nombre de page (en parsant la sortie formatée avec un navigateur en mode terminal) :
Ca signifie que certaines options ne sont pas présentent.
Ici pas de grep avec l'option -P malheureusement:
et je n'ai pas links non-plus du coup :/ .
une alternative peut-être ? :)
Va falloir parser avec du ou du et oublier links et consort ;-\