2017-05-27 342 views
0

我想下載我的網站檔案 - 3dsforums.com - 使用wget,但有數百萬頁我不要想下載,所以我想告訴wget只下載匹配某些頁面URL模式,但我遇到了一些障礙。如何使用--accept-regex選項通過wget下載網站?

作爲一個例子,這是我想下載網址:

http://3dsforums.com/forumdisplay.php?f=46

...所以我使用--accept-regex選項嘗試:

wget -mkEpnp --accept-regex "(forumdisplay\.php\?f=(\d+)$)" http://3dsforums.com 

只是但下載網站的主頁。

是遠程工作迄今唯一的命令如下:

wget -mkEpnp --accept-regex "(\w+\.php$)" http://3dsforums.com 

這提供了以下回應:

Downloaded 9 files, 215K in 0.1s (1.72 MB/s) 
Converting links in 3dsforums.com/faq.php.html... 16-19 
Converting links in 3dsforums.com/index.html... 8-88 
Converting links in 3dsforums.com/sendmessage.php.html... 14-15 
Converting links in 3dsforums.com/register.php.html... 13-14 
Converting links in 3dsforums.com/showgroups.php.html... 14-29 
Converting links in 3dsforums.com/index.php.html... 16-80 
Converting links in 3dsforums.com/calendar.php.html... 17-145 
Converting links in 3dsforums.com/memberlist.php.html... 14-99 
Converting links in 3dsforums.com/search.php.html... 15-16 
Converted links in 9 files in 0.009 seconds. 

是不是有什麼毛病我的正則表達式?或者我誤解了使用--accept-regex選項?我今天一直在嘗試各種各樣的變化,但我並沒有完全理解實際的問題。

回答

0

wget默認使用POSIX正則表達式\d類被表示爲[:digit:]\w類表示爲[:word:],以及爲什麼所有的分組?如果您wget與PCRE支持編譯使您的生活更輕鬆,做得一樣:

wget的-mkEpnp --regex型PCRE --accept正則表達式 「?forumdisplay.php \ F = \ d + $」 http://3dsforums.com

,但...這是行不通的,因爲你的論壇軟件自動創建會話ID(s=<session_id>)並注入他們的所有環節,所以你需要考慮那些還有:

wget -mkEpnp --regex-type pcre --accept-regex "forumdisplay\.php\?(s=.*)?f=\d+(s=.*)?$" http://3dsforums.com 

唯一的問題是現在你的文件將被保存在他們的名字中的會話ID,所以你必須在時再添加一個步驟已完成 - 批量重命名其名稱中帶有會話標識的所有文件。你也許可以通過管道wgetsed做到這一點,但我會留給你:)

如果您wget不支持PCRE這種模式最終會是相當長的,但讓我們希望它.. 。