[解決済み] cURL - ウェブサイトのソースをスキャンする
質問
BASHの中のcURLというプログラムを使って、ウェブページのソースコードをダウンロードしようとしていました。ページが単純なHTMLよりも複雑なエンコーディングを使用している場合、ページのコードをダウンロードしようとすると、問題が発生するのです。 例えば、私は次のページのソースコードを次のコマンドで表示しようとしています。
curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones"
しかし、この結果は、"View source"をクリックしたときにFirefoxが生成したソースコードと一致しないのです。ページ内にJavascriptの要素があるためだと思うのですが、確証はありません。
例えば、私はできません。
curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" | grep "Access to 4G speeds"
そのフレーズは明らかにFirefoxのソースにあるにもかかわらず。 マニュアルページにも目を通してみましたが、可能な解決策を見出すには、この問題について十分な知識がないのです。
望ましい回答は、なぜこれが私が期待するように動作しないのか、そしてLinuxボックスから実行可能なcurlまたは他のツールを使用して問題を解決する方法を含むことです。
EDIT
以下の提案を受けて、useragent switchも入れてみましたが、うまくいきません。
curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" -A "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3" | grep -i "Sorry"
解決方法は?
そのページにアクセスしても、そもそも"Access to 4G speed"が表示されないのですが。
この違いの原因として考えられるのは、Cookieとユーザーエージェントの2つです。
クッキーの指定は
curl
または
wget
. 好きなプラグインを使ってFirefoxからCookieを捨てるか、あるいは単に
javascript:prompt('',document.cookie);
をロケーションバーに入力してください。 そして、wgetやcurlのマニュアルを読み、そのクッキーをどのように含めるかを確認します。
EDIT : どうやら思った通り、Cookieの欠落のようです。
curl --cookie "INSERT THE COOKIE YOU GOT HERE" http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones | grep "Access to 4G"
上記のように、Cookieが何であれ、上から取得することができます。
javascript:prompt('',document.cookie)
をクリックし、出てきたデフォルトのテキストをコピーしてください。ロケーションバーに貼り付けるときは、スプリントのページであることを確認してください(そうしないと、間違ったウェブサイトのクッキーを使ってしまうことになります)。
EDIT 2
ブラウザのクッキーとシェルのクッキーが異なるのは、行われたインタラクションが異なるからです。
そもそも、あなたが言っていたAccess to 4G speedの件が表示されなかったのは、郵便番号を入力していなかったからです。
常に関連性のあるクッキーを持ちたい場合は、そのクッキーを取得するために必要なこと、この場合は郵便番号の入力をcurlに強制させることができます。
curlでは、複数のリクエストを行い、取得したクッキーをクッキージャーに保持することでこれを実現することができます。
[stackoverflow] curl --help | grep cookie
-b/--cookie <name=string/file> Cookie string or file to read cookies from (H)
-c/--cookie-jar <file> Write cookies to this file after operation (H)
-j/--junk-session-cookies Ignore session cookies read from file (H)
ですから、単純にクッキージャーを指定して、郵便番号の送信リクエストを送れば、あとは作業するだけです。
関連
-
[解決済み】 -bash: fork: メモリを確保できない
-
[解決済み] awk や sed を使って特定の文字を削除する
-
[解決済み] bashの「#$」はどういう意味ですか?
-
[解決済み] Grep ディレクトリ内のすべてのファイルを文字列1および文字列2で検索します。
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] cURL呼び出しによるHTTPリクエストを使用してヘッダーを送信する方法は?
-
[解決済み] cURLでプログレスバーを表示しないようにするにはどうしたらいいですか?
-
[解決済み] cURLでHTTPリクエストを行う(PROXYを使用)
-
[解決済み】cURLを使用して、リクエストとレスポンスタイムを一度に測定する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] "grep -q" のポイントは?
-
[解決済み] DiffコマンドとGrepで "バイナリファイル(標準入力)が一致 "と表示される。
-
[解決済み] tar: エラーは回復不可能:現在終了中
-
[解決済み] Gccコンパイル "オブジェクトファイルのサフィックスを計算できない: コンパイルできない"
-
[解決済み] MongoDBへの接続が拒否された errno 111
-
[解決済み] insmod エラー: './hello.ko' を挿入: -1 無効なモジュール形式".
-
[解決済み] Linuxで.dllを使用することは可能です [重複].
-
[解決済み] lsコマンドの出力をフィルタリングして、2月に作成されたファイルのみを表示させるにはどうすればよいですか?
-
[解決済み] Linux の設定 -- ssmtp: smtp.gmail.com:587 を開くことができません。
-
[解決済み] php] <defunct>のプロセスを削除することはできますか?