0

コントローラーの render メソッドを使用して Mechanize オブジェクトのコンテンツをレンダリングすることはできますか? 私は試した:

def new
  a = Mechanize.new
  a.get('http://flickr.com/')

  render :html => a.current_page
end

render :text => aa.page、および と同様にエラーをスローしますa.current_page

関数が Mechanize オブジェクトを期待していないことは理解していrenderますが、それが何を望んでいて、そこに到達する方法がわかりません。

私は開発の初期段階にあり、Ruby のすべての Web スクレイピング フレームワークを調査しています。

4

1 に答える 1

1

bodyメソッドを試してください:

page = agent.get('http://www.example.net')
puts page.body[0..100]
=> "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml"

Nokogiri の機能を使用して、ドキュメントをさらに深く掘り下げることもできます。Mechanize はNokogiriを中心に構築されているため、Nokogiri が作成する解析済みドキュメントにアクセスし、CSS または XPath アクセサーを使用してドキュメントのサブセクションを見つけることができます。必要なものが見つかったら、to_htmlメソッドを使用して Nokogiri にノードまたはノードセットの HTML を出力させることができます。詳細については、「 ruby​​/mechanize (および nokogiri) を使用して html から単一の文字列を抽出する」を参照してください。

これでうまくいきますが、コンテンツをページで直接再利用することで、利用規約や著作権に違反していないかどうかを検討することをお勧めします。

于 2012-09-07T19:49:49.357 に答える