告诉 wget 不要抓取匹配模式的 URL?

告诉 wget 不要抓取匹配模式的 URL?

我想测试我的网站被蜘蛛抓取时的行为方式。但是,我想排除所有包含“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)。

相关内容