CentOS OS インフラ

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

2018年2月18日

こんにちは!シミダイ(@shimidai2100)です。

今回は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のコマンドをマスターすると多くの作業を効率的行えるのでオススメです。

関連記事

-CentOS, OS, インフラ

Copyright© shimidai2100 , 2020 All Rights Reserved.