Wget拥有-H
“span host”选项
Span to any host—‘-H’
The ‘-H’ option turns on host spanning, thus allowing Wget's recursive run to visit any host referenced by a link. Unless sufficient recursion-limiting criteria are applied depth, these foreign hosts will typically link to yet more hosts, and so on until Wget ends up sucking up much more data than you have intended.
我想做一个递归下载(例如,第3级),我想获得图像,样式表,javascripts等(即,正确显示页面所需的文件),即使它们在我的外面主办。但是,我不想要关注到另一个HTML页面的链接(因为它可以转到另一个HTML页面,依此类推,那么数字可能会爆炸。)
有可能以某种方式这样做吗?似乎-H
选项控制跨越到其他主机的图像/样式表/ javascript案例和链接案例,而wget不允许我将两者分开。
答案 0 :(得分:17)
下载页面中的所有相关性
第一步是下载特定页面的所有资源。如果你查看man pages for wget,你会发现:
...下载单个页面及其所有必需品(即使它们存在 单独的网站),并确保该批次在本地正确显示,此作者喜欢使用除-p之外的一些选项:
wget -E -H -k -K -p http://<site>/<document>
获取多个页面
不幸的是,这只适用于每页。您可以使用-r
启用递归,但之后会遇到跟随外部网站并爆炸的问题。如果您知道可用于资源的域的完整列表,则可以将其限制为仅使用-D
的域,但这可能很难。我建议使用-np
(无父目录)和-l
的组合来限制递归的深度。您可能会开始获得其他网站,但至少会受到限制。如果您遇到问题,可以使用--exclude-domains
来限制已知的问题原因。最后,我认为这是最好的:
wget -E -H -k -K -p -np -l 1 http://<site>/level
限制域名
为了帮助确定需要包含/排除哪些域,您可以使用this answer来grep一两页(您希望grep .orig
文件)并列出其中的链接。从那里,您可以构建一个应该包含的域名列表,并使用-D
参数限制它。或者您至少可以找到一些您不想包含的域名,并使用--exclude-domains
限制它们。最后,您可以使用-Q
参数来限制下载的数据量,以防止填满磁盘。
参数说明
-E
\.[Hh][Tt][Mm][Ll]?,
结束
选项将导致后缀.html被附加到本地文件名。-H
-k
-K
-p
-np
-l
-D
--exclude-domains
-Q
答案 1 :(得分:2)
只需将wget -E -H -k -K -p -r http://<site>/
下载到完整的网站即可。如果在下载时打开某个页面并且其资源不可用,请不要紧张,因为当wget完成所有操作时,它会转换它们!
答案 2 :(得分:1)
要下载所有“正确显示页面所需的文件”,您可以使用-p
或--page-requisites
,也可以使用-Q
或--quota
答案 3 :(得分:1)
尝试使用wget --accept-regex
标志; posix --regex-type
被编译成wget标准但你可以在perl regex引擎pcre
中编译,如果你需要更复杂的东西:
E.g。以下内容将获得一级深度的外部网站上的所有png以及在网址中包含google一词的任何其他网页:
wget -r -H -k -l 1 --regex-type posix --accept-regex "(.*google.*|.*png)" "http://www.google.com"
它实际上并没有解决在外部网站上放下多个级别的问题,因为你可能需要编写自己的蜘蛛。但是在大多数情况下,使用--accept-regex
你可能接近你正在寻找的东西。
答案 4 :(得分:0)
在域的单个图层中,您可以使用以下命令在内部和第三方服务器上检查所有链接。
wget --spider -nd -e robots=off -Hprb --level=1 -o wget-log -nv http://localhost
这里的限制是它只检查单个图层。这适用于CMS,您可以使用GET变量而不是CMS生成的URL来展平网站。否则,您可以使用自己喜欢的服务器端脚本通过目录循环此命令。有关所有选项的完整说明,请查看此Github提交。
https://github.com/jonathan-smalls-cc/git-hooks/blob/LAMP/contrib/pre-commit/crawlDomain.sh