如何使用wget下载而无需遵循带有参数的链接


7

我正在尝试下载两个站点以包含在CD中:

http://boinc.berkeley.edu/trac/wiki
http://www.boinc-wiki.info

我遇到的问题是这些都是Wiki。所以当用例如下载时:

wget -r -k -np -nv -R jpg,jpeg,gif,png,tif http://www.boinc-wiki.info/

我确实得到了很多文件,因为它也跟随着诸如...?action = edit ...?action = diff&version = ...之类的链接。

有人知道解决这个问题的方法吗?

我只想要当前页面,没有图像,没有差异等。

PS:

wget -r -k -np -nv -l 1 -R jpg,jpeg,png,gif,tif,pdf,ppt http://boinc.berkeley.edu/trac/wiki/TitleIndex

这为伯克利工作,但boinc-wiki.info仍然给我带来麻烦:/

PPS:

我得到了与以下内容最相关的页面:

wget -r -k -nv  -l 2 -R jpg,jpeg,png,gif,tif,pdf,ppt http://www.boinc-wiki.info

无需超级用户和serverfault之间交叉后superuser.com/questions/158318/...
布莱恩

我应该在哪里发布它?
并列战士

Answers:


7
wget --reject-regex '(.*)\?(.*)' http://example.com

--reject-type posix默认情况下)。wget根据其他评论,该功能仅适用于最新(> = 1.14)版本。

请注意,似乎--reject-regex每个wget呼叫只能使用一次。也就是说,|如果要选择多个正则表达式,则必须使用单个正则表达式:

wget --reject-regex 'expr1|expr2|…' http://example.com

2
wget中的正则表达式不在开始或结束处锚定,因此在您的第一个示例中wget --reject-regex '\?' http://example.com就足够了。
斯特凡纳·古里科

4

wget文档说:

还要注意,查询字符串(以问号('?'开头的URL末尾的字符串)不作为接受/拒绝规则的文件名的一部分,即使这些实际上有助于选择的名称。预期Wget的未来版本将提供允许与查询字符串匹配的选项。

似乎该功能已经存在了一段时间,并且什么也没做。

我没有使用过它,但是httrack看起来比wget具有更强大的过滤功能集,并且可能更适合您要查找的内容(有关过滤器的信息,请参见http://www.httrack.com/html /fcguide.html)。


+1使我指向httrack。看起来比wget好,而wget却停滞不前。
Stefan Lasiewski 2010年

我尝试过Winhttrack,但它的行为很有趣。它下载文件并遍历不应该的目录:/
Tie-fighter

也许有一天wget将被修复。目前,httrack和pavuk都不错。
joeytwiddle

3

新版本的wget(v.1.14)解决了所有这些问题。

您必须使用new选项--reject-regex=....来处理查询字符串。

请注意,我找不到包含这些新选项的新手册,因此您必须使用help命令 wget --help > help.txt


1

Pavuk应该能够做到:

http://pavuk.sourceforge.net/man.html#sect39

Mediawiki示例:

[...]

-skip_url_pattern'oldid =action = editaction = historydiff =limit =[/ =] User:[/ =] User_talk:[^ p] / Special:= Special:[^ R].php / Special:[^ LUA] [^ onl] [^ nul]MediaWiki :搜索:帮助: '

[...]


1

看来您正在尝试避免下载MediaWiki的特殊页面。一旦避开index.php页面,我就解决了这个问题:

wget  -R '*index.php*'  -r ... <wiki link>

但是,Wiki使用的是Wikipedia(http://<wiki>/en/Theme)中的URL,而不是我在其他地方(http://<wiki>/index.php?title=Theme)中看到的模式。由于您提供的链接使用的是Wikipedia模式中的URL,因此我认为该解决方案也可以为您工作。


0

'-R rejlist --reject rejlist'指定以逗号分隔的文件名后缀或格式列表,以接受或拒绝(请参阅文件类型)。请注意,如果任何通配符'*','?','['或']'出现在acclist或rejlist的元素中,它将被视为模式,而不是后缀。

模式可能就是您想要的。我不确定模式的复杂程度,但是您可以尝试仅接受某些文件或阻止:

wget -r -k -np -nv -R jpg,jpeg,gif,png,tif,*\? http://www.boinc-wiki.info/

接受:

wget -r -k -np -nv -R jpg,jpeg,gif,png,tif -A [a-zA-Z.] http://www.boinc-wiki.info/

编辑:根据另一篇文章的nvm。


这对查询字符串有效吗?我使用的每个wget版本仅将拒绝列表模式应用于URL的文件部分。我会试一试。
埃文·安德森

我还没有测试。我只是查阅了文档。我确实发现它使用shell约定,但是就匹配的工作功能而言,您的经验比我的要多。
约书亚·恩菲尔德

转义“?” 在运行wget 1.11.4的CentOS 5.3机器上,似乎没有wget可以执行OP所需的操作。
埃文·安德森
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.