私のウェブサイトがスパイダーによってクロールされたときにどのように機能するかをテストしたいと思います。ただし、「ページ」という単語を含むすべての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がスパイダーによってクロールされないように除外する方法は?
答え1
--reject-regex
いくつかの試行錯誤の後、私は次のように使用することが解決策であることに気づきました。
wget -r --reject-regex page --spider --no-check-certificate -w 1 http://mysite.com/
urlregexにはワイルドカードを含めてはいけませんので*page*
効果はありませんがpage
効果があります。
答え2
からman wget
:
-R rejlist --reject rejlist
Specify comma-separated lists of file name suffixes or patterns to
accept or reject.
このオプションは拒否のみ実行されます。文書パターンと一致します。
page
厳密に言うと、パスの最後の部分(ファイル名など)ではなくURLにリクエストパラメータがあります。
wgetで見つかったすべてのURLをダンプし(たとえば、ダウンロードしたすべてのURLのログをgrep)、要件を満たさない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など)を追加する必要があります。