什么是创build网站的静态备份的最佳方式?

我有一个老Joomla! 网站,我想转换为一个静态的HTML页面(因为它不再被更新,我不想有一个MySQL数据库运行的东西,从来没有更新的开销)。

有没有一个命令行工具,基本上可以抓取和下载整个前瞻性的网站?

我刚刚使用这个命令从一个旧的Joomla静态页面:

wget --adjust-extension --mirror --page-requisites --convert-links http://my.domain.com 

它的简短版本是:

 wget -E -m -p -k http://my.domain.com 

这保存页面扩展名为.hml ,将(几乎)所有的cssjs和图像文件的网页需要。

但是我希望我的静态镜像和原来的镜像有相同的链接。 所以文件名不能有.html扩展名,这使我删除了-E选项。

然后,我发现如果不使用-E-p选项(和-k )的工作方式不同。 但使用-E-p仍然是获取大部分page-requisites的最佳方法。 所以我做了第一次抓取,删除了所有的.html文件,然后在没有-E情况下重新抓取。

作为选项-k没有-E也不能转换所有的链接,我不得不做一些replace。 完整的命令列表是:

 # To get almost every thing: wget --adjust-extension --mirror --page-requisites --convert-links http://my.dommain.com # Remove files ending with .html: find my.dommain.com/ -name '*.html*' -exec rm {} \; # Get pages without .html extension: wget --mirror --page-requisites --convert-links http://my.dommain.com # Check if there are unconverted absolute URL and which are: grep -lr "http:\/\/my.dommain.com" my.dommain.com/ | sort -u | xargs sed -ne '/http:\/\/my\.dommain\.com/s/.*"http:\/\/\([^"]*\).*/http:\/\/\1/p' | sort -u # Unconverted absolute URL correspond to missing needed files, so get them: grep -lr "http:\/\/my.dommain.com" my.dommain.com/ | sort -u | xargs sed -ne '/http:\/\/my\.dommain\.com/s/.*"http:\/\/\([^"]*\).*/http:\/\/\1/p' | sort -u | wget -x -i - # Then, converter all missing absolute URL to relative: grep -lr “http:\/\/my.domain.com” my.domain.com/ | sort -u | xargs sed -i -e '/http:\/\/my\.domain\.com/s/http:\/\/my\.domain\.com\/\([^"]*\)/\1/g' # Converter all URL with "?" into its URL encoding equivalent (%3F): grep -lr –exclude=*.{css,js} '=\s\{0,1\}”[^?"]*?[^"]*”' my.domain.com/ | sort -u | xargs sed -i -e '/\(=\s\{0,1\}”[^?"]*\)?\([^"]*”\)/s/\(=\s\{0,1\}”[^?"]*\)?\([^"]*”\)/\1%3F\2/g' 

正如我在镜像站点下的一个网站,我结束了这个文件:

 my.domain.com/subsite/index.html 

index.html被我的第二个命令删除,这是可以的。 当我运行第二个wget它创build了一个与目录同名的文件,里面有一个index.php ,如:

 my.domain.com/subsite.1 my.domain.com/subsite/index.php 

…并转换(至less一些)首页链接到subsite.1 。 如果所有的家庭链接都是相同的,那么只需要这两个文件中的一个。 index.php是最好的select,因为当客户端要求http://my.domain.com/subsite时会自动提供。

为了解决我跑了:

 # To verify if there were links to subsite.1: grep -r 'subsite\.1' my.domain.com/ # To convert links from subsite.1 to subsite: grep -lr 'subsite\.1' my.domain.com/ | sort -u | xargs sed -i -e '/subsite\.1/s/\(subsite\)\.1/\1/g' # Then I could delete the "duplicated" index file: rm my.domain.com/subsite.1 

最后,使用一个Web开发工具(萤火虫),我发现,仍然有一些文件被包含在JavaScript或CSS。 我一一得到了他们。

wget通常工作。

GNU页面: https : //www.gnu.org/software/wget

维基: http : //wget.addictivecode.org

例:

wget.exe -x -r http://www.acmecorp.com

将在您当前的目录下创build一个名为www.acmecorp.com的目录,并recursion下载所有的内容。

有无数的select。

 wget --help GNU Wget 1.11.1, a non-interactive network retriever. Usage: wget [OPTION]... [URL]... Mandatory arguments to long options are mandatory for short options too. Startup: -V, --version display the version of Wget and exit. -h, --help print this help. -b, --background go to background after startup. -e, --execute=COMMAND execute a `.wgetrc'-style command. Logging and input file: -o, --output-file=FILE log messages to FILE. -a, --append-output=FILE append messages to FILE. -d, --debug print lots of debugging information. -q, --quiet quiet (no output). -v, --verbose be verbose (this is the default). -nv, --no-verbose turn off verboseness, without being quiet. -i, --input-file=FILE download URLs found in FILE. -F, --force-html treat input file as HTML. -B, --base=URL prepends URL to relative links in -F -i file. Download: -t, --tries=NUMBER set number of retries to NUMBER (0 unlimits). --retry-connrefused retry even if connection is refused. -O, --output-document=FILE write documents to FILE. -nc, --no-clobber skip downloads that would download to existing files. -c, --continue resume getting a partially-downloaded file. --progress=TYPE select progress gauge type. -N, --timestamping don't re-retrieve files unless newer than local. -S, --server-response print server response. --spider don't download anything. -T, --timeout=SECONDS set all timeout values to SECONDS. --dns-timeout=SECS set the DNS lookup timeout to SECS. --connect-timeout=SECS set the connect timeout to SECS. --read-timeout=SECS set the read timeout to SECS. -w, --wait=SECONDS wait SECONDS between retrievals. --waitretry=SECONDS wait 1..SECONDS between retries of a retrieval. --random-wait wait from 0...2*WAIT secs between retrievals. --no-proxy explicitly turn off proxy. -Q, --quota=NUMBER set retrieval quota to NUMBER. --bind-address=ADDRESS bind to ADDRESS (hostname or IP) on local host. --limit-rate=RATE limit download rate to RATE. --no-dns-cache disable caching DNS lookups. --restrict-file-names=OS restrict chars in file names to ones OS allows. --ignore-case ignore case when matching files/directories. --user=USER set both ftp and http user to USER. --password=PASS set both ftp and http password to PASS. Directories: -nd, --no-directories don't create directories. -x, --force-directories force creation of directories. -nH, --no-host-directories don't create host directories. --protocol-directories use protocol name in directories. -P, --directory-prefix=PREFIX save files to PREFIX/... --cut-dirs=NUMBER ignore NUMBER remote directory components. HTTP options: --http-user=USER set http user to USER. --http-password=PASS set http password to PASS. --no-cache disallow server-cached data. -E, --html-extension save HTML documents with `.html' extension. --ignore-length ignore `Content-Length' header field. --header=STRING insert STRING among the headers. --max-redirect maximum redirections allowed per page. --proxy-user=USER set USER as proxy username. --proxy-password=PASS set PASS as proxy password. --referer=URL include `Referer: URL' header in HTTP request. --save-headers save the HTTP headers to file. -U, --user-agent=AGENT identify as AGENT instead of Wget/VERSION. --no-http-keep-alive disable HTTP keep-alive (persistent connections). --no-cookies don't use cookies. --load-cookies=FILE load cookies from FILE before session. --save-cookies=FILE save cookies to FILE after session. --keep-session-cookies load and save session (non-permanent) cookies. --post-data=STRING use the POST method; send STRING as the data. --post-file=FILE use the POST method; send contents of FILE. --content-disposition honor the Content-Disposition header when choosing local file names (EXPERIMENTAL). --auth-no-challenge Send Basic HTTP authentication information without first waiting for the server's challenge. HTTPS (SSL/TLS) options: --secure-protocol=PR choose secure protocol, one of auto, SSLv2, SSLv3, and TLSv1. --no-check-certificate don't validate the server's certificate. --certificate=FILE client certificate file. --certificate-type=TYPE client certificate type, PEM or DER. --private-key=FILE private key file. --private-key-type=TYPE private key type, PEM or DER. --ca-certificate=FILE file with the bundle of CA's. --ca-directory=DIR directory where hash list of CA's is stored. --random-file=FILE file with random data for seeding the SSL PRNG. --egd-file=FILE file naming the EGD socket with random data. FTP options: --ftp-user=USER set ftp user to USER. --ftp-password=PASS set ftp password to PASS. --no-remove-listing don't remove `.listing' files. --no-glob turn off FTP file name globbing. --no-passive-ftp disable the "passive" transfer mode. --retr-symlinks when recursing, get linked-to files (not dir). --preserve-permissions preserve remote file permissions. Recursive download: -r, --recursive specify recursive download. -l, --level=NUMBER maximum recursion depth (inf or 0 for infinite). --delete-after delete files locally after downloading them. -k, --convert-links make links in downloaded HTML point to local files. -K, --backup-converted before converting file X, back up as X.orig. -m, --mirror shortcut for -N -r -l inf --no-remove-listing. -p, --page-requisites get all images, etc. needed to display HTML page. --strict-comments turn on strict (SGML) handling of HTML comments. Recursive accept/reject: -A, --accept=LIST comma-separated list of accepted extensions. -R, --reject=LIST comma-separated list of rejected extensions. -D, --domains=LIST comma-separated list of accepted domains. --exclude-domains=LIST comma-separated list of rejected domains. --follow-ftp follow FTP links from HTML documents. --follow-tags=LIST comma-separated list of followed HTML tags. --ignore-tags=LIST comma-separated list of ignored HTML tags. -H, --span-hosts go to foreign hosts when recursive. -L, --relative follow relative links only. -I, --include-directories=LIST list of allowed directories. -X, --exclude-directories=LIST list of excluded directories. -np, --no-parent don't ascend to the parent directory. Mail bug reports and suggestions to <[email protected]>. 

httrack (脱机浏览器:将网站复制到本地目录),语法是:

 httrack www.example.com/bob/ 

这将反映网站www.example.com/bob/和只有这个网站。

不过,我发现更容易使用wget ,例如:

 wget -m www.example.com