Dites à wget de ne pas spider l'URL correspondant à un modèle?

8

Je veux tester comment mon site se comporterait lorsqu'il serait araignée. Cependant, je souhaite exclure toutes les URL contenant le mot "page". J'ai essayé:

$ wget -r -R "*page*" --spider --no-check-certificate -w 1 http://mysite.com/

Le -Rdrapeau est censé rejeter le modèle d'URL contenant le mot "page". Sauf que ça ne semble pas fonctionner:

Spider mode enabled. Check if remote file exists.
--2014-06-10 12:34:56--  http://mysite.com/?sort=post&page=87729
Reusing existing connection to [mysite.com]:80.
HTTP request sent, awaiting response... 200 OK

Comment exclure l'araignée d'une telle URL?

Débordement de question
la source

Réponses:

10

Après quelques essais et erreurs, je me rends compte que la solution consiste simplement à utiliser --reject-regexcomme ceci:

wget -r --reject-regex page --spider --no-check-certificate -w 1 http://mysite.com/

L'urlregex ne doit pas contenir de caractère générique et *page*n'est donc pas valide, mais l' pageest.

Débordement de question
la source
1

De man wget:

-R rejlist --reject rejlist
           Specify comma-separated lists of file name suffixes or patterns to
           accept or reject.

Cette option rejettera uniquement les fichiers correspondant au modèle.

À strictement parler, dans votre URL se pagetrouve un paramètre de requête, pas la dernière partie du chemin (par exemple le nom de fichier).


Vous voudrez peut-être vider toutes les URL que wget a trouvées (par exemple grep le journal pour toutes les URL téléchargées), supprimer les URL qui ne vous satisfont pas (avec grep -v, par exemple) et enfin faire en sorte que wget récupère les URL restantes. Par exemple:

# dump the whole website
wget ... -P dump -o wget.log  ...

# extract URLs from the log file
cat wget.log | grep http | tr -s " " "\012" | grep http >urls

# excludes URLs with the word page anywhere in it
cat urls | grep -v page >urls 

# delete previous dump, since it probably contains unwanted files
rm -rf dump

# Fetch URLs
cat urls | xargs wget -x

Vous voudrez peut-être ajouter d'autres options wget (par exemple --no-check-certificate) selon vos besoins.

hellodanylo
la source
J'ai lu le manuel plusieurs fois. Comme vous pouvez le voir, il dit "suffixes ou modèles de nom de fichier ", il n'est donc pas très clair si le modèle doit être un nom de fichier. Néanmoins, je recherche une solution qui permet d'exclure un modèle d'URL spécifique.
Débordement de la question
@QuestionOverflow Voir l'édition pour un exemple de la façon dont vous pourriez le faire.
hellodanylo
Votre deuxième option serait d'araignée l'ensemble du site, tout télécharger. Ensuite, il téléchargerait presque tout une deuxième fois. Il serait plus efficace de tout télécharger puis de supprimer les pièces qui ne vous satisfont pas.
dhasenan