поисковый робот wget получает нежелательные индексные файлы index.html

Я сделал a ~/.bashrc функционируйте для сохранения некоторых веб-каталогов в мой локальный диск. Это работает хорошо кроме некоторых нежелательных индексных файлов, который не присутствует в веб-сайте. Я использую его как

crwl http://ioccc.org/2013/cable3/  

но это также получает некоторые файлы такой как index.html?C=D;O=A index.html?C=D;O=D index.html?C=M;O=A index.html?C=M;O=D index.html?C=N;O=A index.html?C=N;O=D index.html?C=S;O=A index.html?C=S;O=D

Полный список файлов:

 kenn@kenn:~/experiment/crwl/ioccc.org/2013/cable3$ ls
 bios        index.html?C=D;O=A  index.html?C=S;O=A           screenshot_flightsim4.png
 cable3.c    index.html?C=D;O=D  index.html?C=S;O=D           screenshot_lotus123.png
 fd.img      index.html?C=M;O=A  Makefile                     screenshot_qbasic.png
 hint.html   index.html?C=M;O=D  runme                        screenshot_simcity.png
 hint.text   index.html?C=N;O=A  sc-ioccc.terminal            screenshot_win3_on_macosx.png
 index.html  index.html?C=N;O=D  screenshot_autocad.png

Я хочу исключить те файлы при клонировании того каталога с wget Есть ли любой wget переключатель или прием для клонирования веб-каталога, как это?

Моя функция сценария в .bashrc:

crwl() {
wget --tries=inf --timestamping --recursive --level=inf --convert-links --page-requisites --no-parent "$@"

}

Править: Я нашел два возможных обходных решения

1) Добавление -R index.html?* флаг

2) Добавление -R =A,=D флаг, который отклоняет index.html?C=D;O=A файлы кроме index.html

Я не знаю, какой является надлежащим, но они оба кажутся небезопасными.

3
задан 12 January 2016 в 20:45

2 ответа

Попробуйте это после загрузки, если вы не хотите использовать механизм удаления wget или находитесь в системе, не поддерживающей эту опцию.

FIND=$($WHICH find)
PWD2=$($WHICH pwd)
SH=$($WHICH sh)
ECHO=$($WHICH echo)
LESS=$($WHICH less)

Команда:

$FIND "$($PWD2)" -regextype posix-egrep -type f -regex '^(.*?html\?C=[DNSM];O=[AD]) 

Если вы удовлетворены результатом, выполните следующее:

  1. Введите следующую команду (см. Ниже):
  2. Замените $ ECHO на $ RM в приведенной выше команде.
  3. Удалите трубу (|) и $ LESS, чтобы получить фактический результат.

(Я не несу ответственности за удаление всей файловой системы, следовательно, таким образом.)

RM=$($WHICH rm);export RM
$FIND "$($PWD2)" -regextype ... ;$RM -f -v "${xox}"' \; 

Надеюсь, это поможет.

-exec "$SH" -c 'o="{}";$ECHO -f -v "${o}"' \; | $LESS

Если вы удовлетворены результатом, выполните следующее:

  1. Введите следующую команду (см. Ниже):
  2. Замените $ ECHO на $ RM в приведенной выше команде.
  3. Удалите трубу (|) и $ LESS, чтобы получить фактический результат.

(Я не несу ответственности за удаление всей файловой системы, следовательно, таким образом.)

RM=$($WHICH rm);export RM
$FIND "$($PWD2)" -regextype ... ;$RM -f -v "${xox}"' \; 

Надеюсь, это поможет.

1
ответ дан 1 December 2019 в 16:26

Исключить файлы индексного вида, такие как те, которые имеют URL index.html?C=... без исключения любого другого отчасти index.html* файлы, существует действительно более точная возможная спецификация. Попробуйте: -R '\?C='

Быстрая демонстрация

Настройте другой пустой каталог, например

$ mkdir ~/experiment2
$ cd ~/experiment2

Затем более короткая версия Вашей команды, без рекурсии и уровней, чтобы сделать быстрый тест на одну страницу:

$ wget --tries=inf --timestamping --convert-links --page-requisites --no-parent -R '\?C=' http://ioccc.org/2013/cable3/

После того, как wget сделан, ~/experiment2, будет иметь нет index.html?C=... файлы:

.
└── ioccc.org
    ├── 2013
    │   └── cable3
    │       └── index.html
    ├── icons
    │   ├── back.gif
    │   ├── blank.gif
    │   ├── image2.gif
    │   ├── text.gif
    │   └── unknown.gif
    └── robots.txt

4 directories, 7 files

Таким образом, это действительно исключило их избыточный индексный вид index.html?C=... каталоги при хранении всех других каталогов index.html, в этом случае просто index.html

Реализация

Поэтому просто реализация -R '\?C=' , путем обновления оболочки функционируют в ~/.bashrc:

crwl() {
  wget --tries=inf --timestamping --recursive --level=inf --convert-links --page-requisites --no-parent -R '\?C=' "$@"
}

Затем не забудьте или тестировать в новом терминале или ударе ресурса для создания этого эффективным:

$ . ~/.bashrc

Затем попробуйте его в новом каталоге для сравнения:

$ mkdir ~/experiment3
$ cd ~/experiment3
$ crwl http://ioccc.org/2013/cable3/

Гарантия

  • wget 1.14 и только. Таким образом, если Ваш wget -V говорит, что это 1.13, это не может работать, и у Вас есть потребность на самом деле удалить противных index.html?C=... самостоятельно, или попытка получить более позднюю версию wget.
  • работы путем определения Вас хотят -R или отклоните шаблон в этом случае страницы с ?C= шаблон, который типичен для index.html?C=... версии index.html.
  • однако ? оказывается, wget подстановочный знак, таким образом соответствует литералу ? необходимо выйти из него как \?
  • не прерывайте wget. Поскольку кажется, что путь wget работы со способными обзором веб-страницами состоит в том, чтобы на самом деле загрузить сначала, удалить позже, как будто это должно проверить в случае, если те страницы имеют дальнейшие ссылки на проверку. Таким образом, при отмене этого на полпути, Вы все еще собираетесь закончить с index.html?C= файлы. Только если Вы позволяете wget закончиться, затем wget будет следовать за Вашим -R спецификация и удаляет любого временно загруженного index.html?C=... файлы для Вас
2
ответ дан 1 December 2019 в 16:26

Другие вопросы по тегам:

Похожие вопросы: