• 締切済み

wgetの正規表現について

どなたかご教授下さい。linux初心者です。 気象庁の地震速報の詳細ページを日別に自動で入手したいのです。 たとえば今日ならば、ひとつのファイルは http://www.jma.go.jp/jp/quake/20110612112208391-121117.html ...112208391-121117が発生時刻と発表時刻となるようなので 規則性がありません。そこで: $ wget http://www.jma.go.jp/jp/quake/20110612\d{9}-\d{6}.html とやったのですが; --2011-06-12 12:58:36-- http://www.jma.go.jp/jp/quake/20110612d%7B9%7D-d%7B6%7D.html Resolving www.jma.go.jp (www.jma.go.jp)... 124.40.39.100 Connecting to www.jma.go.jp (www.jma.go.jp)|124.40.39.100|:80... connected. HTTP request sent, awaiting response... 404 Not Found 2011-06-12 12:58:36 ERROR 404: Not Found. となってしまいます。 これはwgetの正規表現がおかしいのでしょうか?

みんなの回答

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.5

「正規表現の理 解不足だったようです。」 自己解決がとんでもない方向にむかいそうなので軌道修正するよ。 まず、理解不足なのは「正規表現」じゃなくて、Linux のコマンドなら正規表現がつかえるだろうというおもいこみかな? しらなかったかもしれないけど、wget は正規表現つかえないよ。正規表現がつかえるコマンドなんてもともとそんなに多くないし。 正規表現がつかえるコマンドかどうかは、 $ man コマンド名 で表示されるコマンドリファレンスのなかに正規表現のことがかいてあるからわかるとおもうよ。 あと、正規表現っていっても方言のようなものがあって、コマンドによってつかえる表現が少しずつちがうから注意してね! 正規表現を覚えるなら、とりあえず grep からでいいかな? http://linuxjm.sourceforge.jp/html/GNU_grep/man1/grep.1.html 質問の解決策は、[ANo.4] さんが回答してくれてるからとくにいらないよね。 よい Linux ライフを!

bs_hikapon
質問者

お礼

ありがとうございました。正規表現をdosのワイルドカードと誤解してしまい、ファイル名が不明でも規則に従ってwget出来る、と誤解していました。 unixは勉強し始めたばかりで、皆さんに迷惑をかけてしまいました。あれから自力でスクリプトを書いて(下記)みたのですが、やはり[ANo.4]が綺麗ですね。大変勉強になりました。 #(1)気象庁ファイルの抜き出し wget http://www.jma.go.jp/jp/quake/quake_local_index.html #(2)特定月日の行だけ抜く awk '/20110612/ {print $0}' quake_local_index.html > quake.log #(3)html部分だけ抜く $ awk '{print substr($0,25,30)}' quake.log > add_quake.log #(4)シェルスクリプト作成 cat add_quake.log | awk '{print "wget http://www.jma.go.jp/jp/quake"$1}' > jikko.sh #(5)実行 sh jikko.sh

すると、全ての回答が全文表示されます。
  • astronaut
  • ベストアンサー率58% (303/516)
回答No.4

地震の一覧ページを取得して、欲しい日付のファイルをダウンロードするスクリプトを書けばよいでしょう。 ということで書いてみました。 #!/bin/bash # 前日の地震の情報を取得するスクリプト date=`date +%Y%m%d --date=yesterday` wget http://www.jma.go.jp/jp/quake/quake_local_index.html -O html.txt for html in `grep "./$date" html.txt | cut -b 26-54` do wget -p --cut-dirs=2 http://www.jma.go.jp/jp/quake/$html done

bs_hikapon
質問者

お礼

ありがとうございました。あれから自分でも考えて見よう見まねで作ってみたのですが、さすが見事なスクリプトです。大変勉強になりました。ご指導感謝します。

すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

httpでの通信では、一般的には、「有効なURLの一覧表」なんてものを受けとれるものではありません。 正規表現は、対象と比較してマッチするかどうかを調べるのに使うものです。 「比較対象」である「URL一覧」が無いのに、どうやって比較するのでしょう? 通常は、RSSとか、一覧表示するページとかから、正規表現にマッチするURLを抽出してそれをwgetで処理します。

bs_hikapon
質問者

お礼

申し訳ありません。正規表現の理解不足だったようです。もう少し勉強したいと思います。

すると、全ての回答が全文表示されます。
回答No.2

コマンドラインに書くURLに正規表現が使えるwgetがあるんでしょうか? http://www.gnu.org/software/wget/manual/wget.html \d{9}-\d{6} の『\d』ってこれ一般的な正規表現なのでしょうか? http://www.kt.rim.or.jp/~kbk/regex/regex.html # 回答でなく質問ですみません。 # お使いのwgetが特殊(?)な実装を施したものであるのなら・・・以下略

bs_hikapon
質問者

お礼

申し訳ありません。正規表現の理解不足だったようです。もう少し勉強したいと思います。

すると、全ての回答が全文表示されます。
  • localica
  • ベストアンサー率52% (202/385)
回答No.1

正規表現? リゾルバで別サイトへリダイレクトされているでしょう。 オプションをきちんと理解する方が良いです。 http://ja.m.wikipedia.org/wiki/2009%E5%B9%B4

bs_hikapon
質問者

お礼

申し訳ありません。正規表現の理解不足だったようです。もう少し勉強したいと思います。

すると、全ての回答が全文表示されます。

関連するQ&A