我正在尝试获取一个带有wget
.问题在于:
为页面提供用户友好的名称
http://domain/wiki/Section/Home, http://domain/wiki/Section/Not+Home http://domain/wiki/Section/Other+page
对于某些页面,它使用查询字符串:
http://domain/wiki/Section/Home?one=value&other=value
由于某种原因,可能备份某些文件的扩展名是
.1
(数字 1 - n)例如styles.css.1
,javascrip.js.2
我想进行递归下载并将其存储在一个文件夹中,但避免带有查询的文件;Home?query
- 在这种情况下Home
。为此,我尝试了--reject
一种模式,但无法使其发挥作用。
.1,.2,... .n
如果我添加一长串数字,我可以避免扩展,但希望有更好的方法。
这是wget
:
wget \
--page-requisites \
--no-parent \
--no-host-directories \
--no-directories \
--convert-links \
--load-cookies wget_cookies.txt --cookies=on --keep-session-cookies \
-P WikiFolders/pages/ \
-e robots=off \
-r \
--reject='1,2,3,4,5,6,7,8,9,*\\?*' \
--content-disposition \
--no-check-certificate \
http://domain/wiki/Section/
如果我以这种方式运行它,我确实可以访问该网站,但某些内容的速度确实很慢。
注意:为了避免带有查询的文件,我尝试过,*\\?*
但这不起作用。
下载后,我删除内容:
find WikiFolders/pages/ -iname "*\\?*" -delete
但同样,这真的很慢,我必须下载很多内容。
我曾考虑过首先排除HTML
并下载图像、CSS 和 js,并使用其他 wget HTML,但由于文件没有扩展名,因此这是行不通的。
答案1
您可以使用[]
符号来指定数字和字母的范围。重复多个。
*[0-9],*[0-9][0-9],*[0-9][0-9][0-9]
|____||__________||_______________|
| | |
| | +---------- Reject ending with 000 to 999
| +------------------------- Reject ending with 00 to 99
+--------------------------------- Reject ending with 0 to 9
这也可以与 一起使用--accept
。
对于查询链接,无法将其过滤掉 - 但是,如果您指定,
*\?*
文件将被删除后它们已被下载。因此,您将不得不忍受它使用带宽和下载时间,但您不必事后进行清理。
所以,summa summarum,也许是这样的:
--reject='*.[0-9],*.[0-9][0-9],*\?*'
如果这还不够,您将不得不研究其他工具,例如中提到的工具可能重复您问题下的链接。
答案2
您可以避免使用该--reject-regex "(.*)\?(.*)"
选项下载查询链接,如所述使用wget但忽略url参数 - Thinbug