Linux バックエンド

wgetコマンドでサイトを一括ダウンロードする方法とは?コマンドのオプションも紹介。

2018年2月18日

こんにちは!土門大貴(daikidomon)です。

今回はwebサイトをまるっとダウンロードできる「wget」コマンドについて記事を書いていこうと思います。

wgetコマンドはfacebookのマーク・ザッカーバーグを題材にした、「Social Network」でもwgetコマンドは出ていました。

wgetをとても便利なツールですが、闇雲に使うととても迷惑なツールなので今回の使い方をしっかりマスターしてください。

windowsではwgetコマンドを使用することができません。wgetを使用する場合は、「cygwin」をインストールする必要がありますので注意してください。

wgetコマンドとは?

wgetの正式名称は「GNU Wget」であり、ウェブサーバからコンテンツを取得するダウンローダーです。

名前からわかる通りGNUプロジェクトの一部のですが、名前の由来はワールド・ワイド・ウェブ(WWW)とプログラムの主要な機能であるデータ取得を意味する英語の「getゲット」から派生したものと言われています。

現在wgetはウェブ閲覧のために用いられるTCP/IPに基づいたもっともポピュラーなプロトコルである、HTTP、HTTPS及びFTP によるダウンロードが利用可能です。

wgetコマンドの使用例

ではwgetの記載方法について紹介します。

基本的な使い方(オプション無し)

まずは基本的な使い方です。

wget サイトのURL

↓が実行例です。

$ wget yahoo.co.jp
--2018-02-18 11:24:16-- http://yahoo.co.jp/
Resolving yahoo.co.jp (yahoo.co.jp)... 183.79.135.206, 182.22.59.229
Connecting to yahoo.co.jp (yahoo.co.jp)|183.79.135.206|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://www.yahoo.co.jp/ [following]
--2018-02-18 11:24:16-- https://www.yahoo.co.jp/
Resolving www.yahoo.co.jp (www.yahoo.co.jp)... 182.22.24.252
Connecting to www.yahoo.co.jp (www.yahoo.co.jp)|182.22.24.252|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: 'index.html'

[ <=> ] 19,742 --.-K/s in 0.004s

2018-02-18 11:24:16 (5.15 MB/s) - 'index.html' saved [19742]

指定したURLの全ファイルをダウンロード(オプション:-r -l 0)

指定したURLの全ファイルをダウンロードするために以下のオプションを付与させます。

  • -r :再帰ダウンロード
  • -l :最初のページから階層を辿る深さを指定します。0を指定すると全階層を辿ります。
wget -r -l 0 サイトのURL

↓が実行例です。

$ wget -r -l 0 http://www.hatena.ne.jp/
--2018-02-18 11:31:42-- http://www.hatena.ne.jp/
Resolving www.hatena.ne.jp (www.hatena.ne.jp)... 59.106.194.19
Connecting to www.hatena.ne.jp (www.hatena.ne.jp)|59.106.194.19|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: 'www.hatena.ne.jp/index.html'

[ <=> ] 124,793 --.-K/s in 0.02s

2018-02-18 11:31:42 (6.91 MB/s) - 'www.hatena.ne.jp/index.html' saved [124793]

Loading robots.txt; please ignore errors.
--2018-02-18 11:31:42-- http://www.hatena.ne.jp/robots.txt
Reusing existing connection to www.hatena.ne.jp:80.
HTTP request sent, awaiting response... 200 OK
Length: 159 [text/plain]
Saving to: 'www.hatena.ne.jp/robots.txt'

100%[==================================================================>] 159 --.-K/s in 0s

2018-02-18 11:31:42 (21.7 MB/s) - 'www.hatena.ne.jp/robots.txt' saved [159/159]

Loading robots.txt; please ignore errors.
--2018-02-18 11:31:42-- https://www.hatena.ne.jp/robots.txt
Connecting to www.hatena.ne.jp (www.hatena.ne.jp)|59.106.194.19|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 159 [text/plain]
Saving to: 'www.hatena.ne.jp/robots.txt'

100%[==================================================================>] 159 --.-K/s in 0s

2018-02-18 11:31:42 (23.5 MB/s) - 'www.hatena.ne.jp/robots.txt' saved [159/159]

--2018-02-18 11:31:42-- http://www.hatena.ne.jp/css/hatenaportal/portal2012.css?t=1487038420
Connecting to www.hatena.ne.jp (www.hatena.ne.jp)|59.106.194.19|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 75223 (73K) [text/css]
Saving to: 'www.hatena.ne.jp/css/hatenaportal/portal2012.css?t=1487038420'

100%[==================================================================>] 75,223 --.-K/s in 0.01s

2018-02-18 11:31:42 (5.68 MB/s) - 'www.hatena.ne.jp/css/hatenaportal/portal2012.css?t=1487038420' saved [75223/75223]

~省略~

失敗してもダウンロードにやり直す(オプション:-c )

ダウンロードを途中で中断してしまい、再度やり直しをしたい場合に再ダウンロード時に「-c」オプションを用いる。

大きなファイルをダウンロードする時に使用することをオススメします。

  • -c :部分的にダウンロードしたファイルの続きから始める
wget -o サイトのURL

ダウンロードの速度制限を行う(オプション:-limit-rate=)

ダウンロード速度を制限します。ダウンロードするサイト(サーバー)の負荷を減らすために使用することをオススメします。

  • -limit-rate= :ダウンロード速度を RATE に制限する

指定した拡張子だけダウンロードする(オプション:-A)

指定したファイル拡張子だけダウンロードすることができます。複数設定する場合には、カンマ区切りでファイル拡張子を指定します。

wget -A ○○,□□... サイトのURL

HTMLを表示するのに必要な画像やCSSなどもダウンロード(オプション:-p)

HTMLを表示するのに必要な画像・音声やCSSなどもダウンロード合わせてダウンロードすることができます。

  • -p:HTMLを表示するのに必要な画像・音声やCSSなどもダウンロード
wget -p サイトのURL

ダウンロード毎に待ち時間を使う(オプション:-w N -random-wait)

1ファイルダウンロードする毎に待ち時間を掛けることは重要です。連続でサイトからダウンロードしようとするとサーバーに高負荷が掛かってしまうからです。

  • -w  N:ダウンロードごとにN秒待つ
  • -random-wait:-wで指定した数の0.5〜1.5倍の時間待つ
wget -w N --random-wait サイトのURL

サイトをダウンロードする際の最適なオプション

私がおすすめするサイトをダウンロードするオプションは以下になります。

wget -r -l 0 -w 1 --random-wait -p サイトのURL

↓が実行例です。

$ wget -r -l 0 -w 1 --random-wait http://www.hatena.ne.jp/
--2018-02-18 11:54:38-- http://www.hatena.ne.jp/
Resolving www.hatena.ne.jp (www.hatena.ne.jp)... 59.106.194.19
Connecting to www.hatena.ne.jp (www.hatena.ne.jp)|59.106.194.19|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: 'www.hatena.ne.jp/index.html'

[ <=> ] 124,962 --.-K/s in 0.02s

2018-02-18 11:54:38 (7.79 MB/s) - 'www.hatena.ne.jp/index.html' saved [124962]

Loading robots.txt; please ignore errors.
--2018-02-18 11:54:39-- http://www.hatena.ne.jp/robots.txt
Reusing existing connection to www.hatena.ne.jp:80.
HTTP request sent, awaiting response... 200 OK
Length: 159 [text/plain]
Saving to: 'www.hatena.ne.jp/robots.txt'

100%[==================================================================>] 159 --.-K/s in 0s

2018-02-18 11:54:39 (23.7 MB/s) - 'www.hatena.ne.jp/robots.txt' saved [159/159]

Loading robots.txt; please ignore errors.
--2018-02-18 11:54:40-- https://www.hatena.ne.jp/robots.txt
Connecting to www.hatena.ne.jp (www.hatena.ne.jp)|59.106.194.19|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 159 [text/plain]
Saving to: 'www.hatena.ne.jp/robots.txt'

100%[==================================================================>] 159 --.-K/s in 0s

2018-02-18 11:54:40 (27.9 MB/s) - 'www.hatena.ne.jp/robots.txt' saved [159/159]

wgetコマンドのオプション

その他のオプションについても残しておきます。

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.
--report-speed=TYPE Output bandwidth as TYPE. TYPE can be bits.
-i, --input-file=FILE download URLs found in local or external FILE.
-F, --force-html treat input file as HTML.
-B, --base=URL resolves HTML input-file links (-i -F)
relative to URL.
--config=FILE Specify config file to use.

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 (overwriting them).
-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.
--no-use-server-timestamps don't set the local file's timestamp by
the one on the server.
-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.5*WAIT...1.5*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.
-4, --inet4-only connect only to IPv4 addresses.
-6, --inet6-only connect only to IPv6 addresses.
--prefer-family=FAMILY connect first to addresses of specified family,
one of IPv6, IPv4, or none.
--user=USER set both ftp and http user to USER.
--password=PASS set both ftp and http password to PASS.
--ask-password prompt for passwords.
--no-iri turn off IRI support.
--local-encoding=ENC use ENC as the local encoding for IRIs.
--remote-encoding=ENC use ENC as the default remote encoding.
--unlink remove file before clobber.

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.
--default-page=NAME Change the default page name (normally
this is `index.html'.).
-E, --adjust-extension save HTML/CSS documents with proper extensions.
--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).
--content-on-error output the received content on server errors.
--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.
--preserve-permissions preserve remote file permissions.
--retr-symlinks when recursing, get linked-to files (not dir).

WARC options:
--warc-file=FILENAME save request/response data to a .warc.gz file.
--warc-header=STRING insert STRING into the warcinfo record.
--warc-max-size=NUMBER set maximum size of WARC files to NUMBER.
--warc-cdx write CDX index files.
--warc-dedup=FILENAME do not store records listed in this CDX file.
--no-warc-compression do not compress WARC files with GZIP.
--no-warc-digests do not calculate SHA1 digests.
--no-warc-keep-log do not store the log file in a WARC record.
--warc-tempdir=DIRECTORY location for temporary files created by the
WARC writer.

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 or CSS point to
local files.
--backups=N before writing file X, rotate up to N backup 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.
--accept-regex=REGEX regex matching accepted URLs.
--reject-regex=REGEX regex matching rejected URLs.
--regex-type=TYPE regex type (posix|pcre).
-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.
--trust-server-names use the name specified by the redirection
url last component.
-X, --exclude-directories=LIST list of excluded directories.
-np, --no-parent don't ascend to the parent directory.

いかがでしたか?wgetは多くの機能があり、ともて強力なコマンドです。

またその他Linuxのコマンドをマスターすると多くの作業を効率的行えるのでオススメです。

関連記事

-Linux, バックエンド

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.