Скажите wget не указывать URL-адрес, соответствующий шаблону?

8

Я хочу проверить, как будет вести себя мой сайт, когда его падают. Однако я хочу исключить все URL, содержащие слово «страница». Я старался:

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

Предполагается, что -Rфлаг отклоняет шаблон URL, содержащий слово «страница». За исключением того, что это не похоже на работу:

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

Как исключить паутинга такого URL?

Вопрос переполнен
источник

Ответы:

10

После некоторых проб и ошибок я понимаю, что решение заключается в --reject-regexследующем:

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

Urlregex не должен содержать подстановочный знак и, следовательно, *page*является недействительным, но pageесть.

Вопрос переполнен
источник
1

От man wget:

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

Эта опция будет отклонять только файлы, которые соответствуют шаблону.

Строго говоря, в вашем URL pageесть параметр запроса, а не последняя часть пути (например, имя файла).


Возможно, вы захотите сбросить все URL-адреса, найденные wget (например, grep log для всех загруженных URL-адресов), удалить те URL-адреса, которые вас не устраивают (например, с помощью grep -v), и, наконец, заставить wget получить оставшиеся URL-адреса. Например:

# 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

Возможно, вы захотите добавить другие параметры wget (например, --no-check-certificate) в соответствии с вашими потребностями.

hellodanylo
источник
Я прочитал руководство несколько раз. Как видите, в нем написано «суффиксы или шаблоны имен файлов », поэтому не совсем понятно, должен ли шаблон быть именем файла. Тем не менее, я ищу решение, которое позволяет исключить определенный шаблон URL.
Вопрос переполнен
@QuestionOverflow Посмотрите правку для одного примера того, как вы можете это сделать.
hellodanylo
Ваш второй вариант будет паук весь сайт, загружая все. Тогда это загрузило бы почти все во второй раз. Было бы более эффективно загрузить все, а затем удалить части, которые вас не удовлетворяют.
дхасенан