上記のサイトをスクレイピングして、データを取得を試みています。
authcode=hogehogeの部分なのかpostだからか
Nokogiriやselenium webdriverなど使ってもうまく取得できませんでした。
このようなフォームの場合取得するにはどうすればいいでしょうか。
もし簡単にrubyなどでソースかいていただければ助かります・・・・・・m(_ _)m
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 で書いてください。
微妙なトラップを入れてるのは、「ガシガシとリクエストを飛ばしてくれるな」ということだと思いますので、その辺は察してアクセスしてください。