我想测试我的网站被蜘蛛抓取时的行为方式。但是,我想排除所有包含“page”一词的 URL。我试过:
$ wget -r -R "*page*" --spider --no-check-certificate -w 1 http://mysite.com/
该-R
标志应该拒绝包含单词“page”的 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.
该选项只会拒绝文件与模式匹配的。
严格来说,你的URL中page
是一个请求参数,而不是路径的最后部分(例如文件名)。
您可能想要转储 wget 找到的所有 URL(例如 grep 所有下载的 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)。