2016-05-21 10 views
0

ようこそ、私は問題がある、宝石機械化はサイトに接続しません。宝石がインストールされています。 コード:機械化はサイトに接しません

require 'mechanize' 

agent = Mechanize.new 
main_page = agent.get 'https://imbd.com' 
main_page.link_with(text: "Top 250").click 
rows = list_page.root.css(".lister-list tr") 

puts rows.size 

そして、これは誤りです:

C:/Ruby/lib/ruby/2.2.0/net/http.rb:879:in `initialize': A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. - connect(2) for "imbd.com" port 80 (Errno::ETIMEDOUT) 
    from C:/Ruby/lib/ruby/2.2.0/net/http.rb:879:in `open' 
    from C:/Ruby/lib/ruby/2.2.0/net/http.rb:879:in `block in connect' 
    from C:/Ruby/lib/ruby/2.2.0/timeout.rb:73:in `timeout' 
    from C:/Ruby/lib/ruby/2.2.0/net/http.rb:878:in `connect' 
    from C:/Ruby/lib/ruby/2.2.0/net/http.rb:863:in `do_start' 
    from C:/Ruby/lib/ruby/2.2.0/net/http.rb:858:in `start' 
    from C:/Ruby/lib/ruby/gems/2.2.0/gems/net-http-persistent-2.9.4/lib/net/http/persistent.rb:700:in `start' 
    from C:/Ruby/lib/ruby/gems/2.2.0/gems/net-http-persistent-2.9.4/lib/net/http/persistent.rb:631:in `connection_for' 
    from C:/Ruby/lib/ruby/gems/2.2.0/gems/net-http-persistent-2.9.4/lib/net/http/persistent.rb:994:in `request' 
    from C:/Ruby/lib/ruby/gems/2.2.0/gems/mechanize-2.7.4/lib/mechanize/http/agent.rb:267:in `fetch' 
    from C:/Ruby/lib/ruby/gems/2.2.0/gems/mechanize-2.7.4/lib/mechanize.rb:464:in `get' 
    from C:/Ruby/Workspace/imbd.rb:4:in `<main>' 

誰もが間違って何任意のアイデアを持っていますか?ありがとう!

答えて

0

、あなたの問題は存在しないサイトにアクセスしようとしているということです。 www.imdb.comの代わりにwww.imbd.comにアクセスしようとしています。したがって、エラーメッセージは正確です。

そしてFWIW、IMDBは、あなたが自分のサイトをこすりたくない:

Robots and Screen Scraping: You may not use data mining, robots, screen scraping, or similar data gathering and extraction tools on this site, except with our express written consent as noted below.

+0

それについて知りませんでした。私は自分のデータベースから10タイトルしか拝見していない。 edu目的のためだけに、コマースやスパムではありません:)そのスペルミスのおかげで、今私はちょうどばかだ。コードの他の部分のエラーを探しました。 – Ioo

0

imdbを見た後、彼らはjsを解析することはできませんし、着信応答を理解することができませんので、機械化を旅行するJavascriptの膨大な量を実行している参照してください。あなたがコンテンツをスクラップしたりブラウジングを自動化しようとしているなら、Mechanizeの代わりにCapybaraを使うことをお勧めします。カピバラをPoltergeistのようなものと組み合わせると(このアプローチでphantom.jsをインストールする必要があります)、Mechanizeよりもはるかに機能し、たくさんのjをロードするページとのやりとりを自動化するために構築されます。

エラーを回避する方法を追加しました。 Mechanizeがjsスクリプトが実行される前にページを取得しようとしていたため、有効なデータが得られなかったためです。

編集:それはMechanizeのは、JavaScriptをサポートしていないのは事実だが

agent = Mechanize.new 
    agent.read_timeout=3 #set the agent time out 
    begin 
    main_page = agent.get 'https://imbd.com' 
    main_page.link_with(text: "Top 250").click 
    rows = list_page.root.css(".lister-list tr") 
    rescue Timeout::Error 
    puts "Timeout!" 
    puts "read_timeout attribute is set to #{agent.read_timeout}s" if !agent.read_timeout.nil? 
    end 
+0

私は気... Mechanizeのは、この正確な方法でimbdページを取り扱い、私はそれで苦労1つのチュートリアルで見たことは。 – Ioo

+0

リンク先のチュートリアルは古くなっている可能性があります。私は機械化に頼っていましたが、今では私がCapybara&Poltergeistを使い始めなければならなかったどこでもjsサイトが復活し、幸せになれませんでした。 – bkunzi01

+0

ここにスクリーンショットがあります。それはディスク上のビデオからです - http://prntscr.com/b6r2j7 – Ioo

関連する問題