人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

http://www.related-keywords.com/

上記のサイトをスクレイピングして、データを取得を試みています。
authcode=hogehogeの部分なのかpostだからか
Nokogiriやselenium webdriverなど使ってもうまく取得できませんでした。
このようなフォームの場合取得するにはどうすればいいでしょうか。
もし簡単にrubyなどでソースかいていただければ助かります・・・・・・m(_ _)m

●質問者: yes_ouzi_no
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●500ポイント ベストアンサー

Cookie に PHPSESSID が入っているので、セッションを継続できるタイプのライブラリを使うのが楽です(自前でもできなくはないですが)。
というわけで、Mechanize を使います。

ひとつ、トラップがあります。
そのページのソースの script タグをよく見てください(整形してます)。

<script type="text/javascript">
 ... // Google Analytics のコード
 $(function() {
 $("#gaco").val("DBSNl"); // ★ここ
 });
</script>

id=gaco は、name=authcode の input type=hidden の要素です。
id=gaco に設定している値は、毎回変わります。

というわけで、こんな感じのコードで取得できます。

require 'mechanize'

agent = Mechanize.new
page = agent.get('http://www.related-keywords.com/')

s = page.search('script')

if /\$\(".gaco"\).val\("(.*)"\)/ =~ s[1].inner_html then
 f = page.form()
 f.field_with(:name => "authcode").value = $1
 f.field_with(:name => "keyword").value = '' # キーワード
 res = agent.submit f
 # ここからは、検索結果のスクレイピング
 res.search("a").each { |link|
 puts link.inner_html + " : " + link.attribute("href")
 }
end

スクリプトは UTF-8 で書いてください。


微妙なトラップを入れてるのは、「ガシガシとリクエストを飛ばしてくれるな」ということだと思いますので、その辺は察してアクセスしてください。


yes_ouzi_noさんのコメント
こちら、ありがとうございます。!トラップ全く読めずでした・・・ 勉強になります。

a-kuma3さんのコメント
id が gaco (<b>g</b>oogle <b>a</b>nalytics <b>co</b>de ?) だし、name が authcode なので、機械的なアクセスを意図的にガードしている、というよりは、Google の何かの API の使う際のトークンか何かを設定しているのかなあ、という気もするんですが、ググってみても情報が見つけられないんですよね。 意図的なガードだったら、置き換える元と後の文字列の長さを同じにした方が、絶対に分かりにくいし。 トラッキングコードの書き方も、チョイ古いみたいだし、ややモヤっとした感じは残るのですが <tt>:-)</tt>
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ