4

スクリーンスクレイパーを作成しようとしていますが、Web サイトのメイン ページをダウンロードしたいと考えています。

ブラウザーでページのソースを表示したときに表示される HTML コード全体を取得できません。ブラウザでソースを表示したときに、表示されるすべてをロードしていることを確認するにはどうすればよいですか?

# Required Gems
require 'rubygems' # Loads gems
require "nokogiri" # Nokogiri
require "open-uri" # For Nokogiri
require "chronic" # For time parsing
require "cgi" # For parsing urls
require 'net/http' # For image downloading


URL = URI.parse("http://www.gocrimson.com/landing/index")

hBOList = Nokogiri::HTML(open(URL)) 
4

4 に答える 4

3

元の要求されたページがロードされた後、ページのチャンクをロードするために Ajax が使用されているため、ソースのブラウザのビューは、要求された HTML ファイル自体と必ずしも一致しません。

ページが JavaScript と Ajax を使用している場合、通常の方法を使用してページのソースを取得することはできません。ただし、コンテンツ ロードのチェーン全体をデコードし、Ruby コードで再作成する必要があります。

または、Ruby が対話できるブラウザーを使用して、最初のページを読み込むように指示すると、ブラウザーで JavaScript のアクションがトリガーされ、ブラウザーが追加のコンテンツを読み込み、コードでそれを抽出して、必要な処理を実行できます。 . そのためには、Watirまたはその派生物の 1 つを調べる必要があります。

于 2013-01-12T06:47:36.350 に答える
0

行う:

require 'open-uri'
File.open("page_test.txt","w"){|f| f << open("http://www.gocrimson.com/landing/index").read}

目的のページのコンテンツ全体をコピーしますか? もしそうなら、Nokogiri がどこかに何かをドロップしたり、ページのレンダリング後に JavaScript を介して何かをロードしたりしています。

于 2013-01-11T21:56:16.507 に答える
0

Hisako と redcup は、Tin Man が上で提案したように、watir を試す必要があります。何かのようなもの:

require 'rubygems'
require 'watir-webdriver'

browser = Watir::Browser.new
browser.goto "http://www.gocrimson.com/landing/index"

puts browser.html

やりたいことをやればいい。

于 2013-01-21T21:08:38.240 に答える
0

一部のコンテンツは、ボタンのクリック時または何らかのアクションの後に ajax 呼び出しによって読み込まれると思います。必要なものと、これを行うアクションがわかっている場合。次に、機械化が表示されます。Mechanize は内部で Nokogiri を使用しており、何らかのアクションが必要なページの読み込みに役立ちます。

于 2013-01-13T08:56:45.173 に答える