告诉wget不匹配模式的Spider URL?


8

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

如何排除此类网址的爬虫?

Answers:


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是一个请求参数,而不是路径的最后一部分(例如文件名)。


您可能要转储找到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)。


我确实读了几次手册。如您所见,它说“文件名后缀模式”,因此不清楚模式是否必须是文件名。不过,我正在寻找一种允许排除特定URL模式的解决方案。
2014年

@QuestionOverflow有关如何操作的示例,请参见编辑。
hellodanylo

第二种选择是搜索整个站点,下载所有内容。然后它将第二次下载几乎所有内容。下载所有内容然后删除您不满意的部分会更有效率。
dhasenan '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.