Comment télécharger avec wget sans suivre les liens avec les paramètres


7

J'essaie de télécharger deux sites à inclure sur un CD:

http://boinc.berkeley.edu/trac/wiki
http://www.boinc-wiki.info

Le problème que j'ai, c'est que ce sont deux wikis. Ainsi, lors du téléchargement avec par exemple:

wget -r -k -np -nv -R jpg,jpeg,gif,png,tif http://www.boinc-wiki.info/

J'obtiens beaucoup de fichiers car il suit également des liens comme ...? Action = edit ...? Action = diff & version = ...

Quelqu'un connaît-il un moyen de contourner cela?

Je veux juste les pages actuelles, sans images, sans différences etc.

PS:

wget -r -k -np -nv -l 1 -R jpg,jpeg,png,gif,tif,pdf,ppt http://boinc.berkeley.edu/trac/wiki/TitleIndex

Cela a fonctionné pour berkeley mais boinc-wiki.info me donne toujours des ennuis: /

PPS:

J'ai obtenu ce qui semble être les pages les plus pertinentes avec:

wget -r -k -nv  -l 2 -R jpg,jpeg,png,gif,tif,pdf,ppt http://www.boinc-wiki.info

Pas besoin de croiser le post entre superutilisateur et serverfault superuser.com/questions/158318/…
Bryan

Où aurais-je dû l'afficher?
Tie-fighter

Réponses:


7
wget --reject-regex '(.*)\?(.*)' http://example.com

( --reject-type posixpar défaut). Fonctionne uniquement pour les versions récentes (> = 1.14) de wgetcependant, selon d'autres commentaires.

Attention, il semble que vous ne puissiez l'utiliser --reject-regexqu'une seule fois par wgetappel. Autrement dit, vous devez utiliser |dans une seule expression régulière si vous souhaitez sélectionner sur plusieurs expressions régulières:

wget --reject-regex 'expr1|expr2|…' http://example.com

2
Les expressions rationnelles dans wget ne sont pas ancrées au début ou à la fin, donc dans votre premier exemple wget --reject-regex '\?' http://example.comest suffisant.
Stéphane Gourichon

4

La documentation de wget indique:

Notez également que les chaînes de requête (chaînes à la fin d'une URL commençant par un point d'interrogation ('?') Ne sont pas incluses dans le nom de fichier des règles d'acceptation / de rejet, même si celles-ci contribuent en fait au nom choisi pour Il est prévu qu'une future version de Wget fournira une option pour permettre la correspondance avec les chaînes de requête.

Il semble que cette fonctionnalité soit sur la table depuis un certain temps et que rien n'a été fait avec.

Je ne l'ai pas utilisé, mais httrack semble avoir un ensemble de fonctionnalités de filtrage plus robuste que wget et peut être mieux adapté à ce que vous recherchez (lisez les filtres ici http://www.httrack.com/html /fcguide.html ).


+1 pour m'avoir dirigé vers httrack. Il semble meilleur que wget, et wget semble stagner.
Stefan Lasiewski

J'ai essayé Winhttrack mais il se comporte de façon amusante. Il télécharge des fichiers et traverse des répertoires qu'il ne devrait pas: /
Tie-fighter

Peut-être qu'un jour wget sera corrigé. Pour l'instant, httrack et pavuk ont ​​tous les deux l'air bien.
joeytwiddle

3

La nouvelle version de wget (v.1.14) résout tous ces problèmes.

Vous devez utiliser la nouvelle option --reject-regex=....pour gérer les chaînes de requête.

Notez que je n'ai pas trouvé le nouveau manuel qui inclut ces nouvelles options, vous devez donc utiliser la commande d'aide wget --help > help.txt


1

Pavuk devrait pouvoir le faire:

http://pavuk.sourceforge.net/man.html#sect39

Exemple Mediawiki:

[...]

-skip_url_pattern ' oldid = , action = edit , action = histoire , diff = , limite = , [/ =] Utilisateur: , [/ =] User_talk: , [^ p] / Spécial: , = Spécial: [^ R] , php / spécial: [^ LUA] [^ ONL] [^ NUL] , MediaWiki: , Recherche: , Aide: '

[...]


1

Il semble que vous essayez d'éviter de télécharger des pages spéciales de MediaWiki. J'ai résolu ce problème une fois en évitant la index.phppage:

wget  -R '*index.php*'  -r ... <wiki link>

Cependant, le wiki a utilisé les URL comme vu dans Wikipedia ( http://<wiki>/en/Theme) et non le modèle que j'ai vu dans d'autres endroits ( http://<wiki>/index.php?title=Theme). Étant donné que le lien que vous avez donné utilise des URL dans le modèle Wikipedia, je pense que cette solution peut également fonctionner pour vous.


0

'-R rejlist --reject rejlist' Spécifiez des listes séparées par des virgules de suffixes ou de modèles de nom de fichier à accepter ou à rejeter (voir Types de fichiers). Notez que si l'un des caractères génériques, '*', '?', '[' Ou ']', apparaît dans un élément de acclist ou rejlist, il sera traité comme un modèle plutôt que comme un suffixe.

Les motifs sont probablement ce que vous voulez. Je ne sais pas à quel point les modèles sont sophistiqués mais vous pouvez soit essayer d'accepter uniquement certains fichiers, soit bloquer:

wget -r -k -np -nv -R jpg,jpeg,gif,png,tif,*\? http://www.boinc-wiki.info/

J'accepte:

wget -r -k -np -nv -R jpg,jpeg,gif,png,tif -A [a-zA-Z.] http://www.boinc-wiki.info/

Edit: nvm à la lumière de l'autre post.


Cela fonctionne sur les chaînes de requête? Chaque version de wget que j'ai utilisée applique uniquement des modèles de liste de rejet à la partie fichier de l'URL. Je vais essayer et voir.
Evan Anderson

Je ne l'ai pas testé. J'ai juste recherché la documentation. J'ai trouvé qu'il utilise la convention shell, mais votre expérience parlera plus que la mienne en ce qui concerne la fonction de travail de la correspondance.
Joshua Enfield

Échapper au "?" ne semble pas obliger wget à faire ce que l'OP voudrait sur ma boîte CentOS 5.3 exécutant wget 1.11.4.
Evan Anderson
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.