ウェブページの動的データ取得に関する知識学習(2)

4755 ワード

jsにロードされたダイナミックコンテンツを取得する3つの方法
一部のウェブサイトの比較的重要な内容はJavascriptを採用して動的に内容をロードするかもしれません.採集を防止し、その中の情報を取得します.
以下では、javascriptのコンテンツを取得できる3つの方法を紹介します.3つの方法の原理は同じです.ブラウザエンジンでjavascriptを解析します.
1)、WebBrowserコントロールを利用する
この方式はみんなも知っています.多く話しません.大切なところをいくつか話します.まず、コントロールのために、DcumentComplettedイベントでコンテンツ取得の仕事を完成したいです.
は、ドキュメントの読み込みが完了した後にトリガされます.次に、このイベントは問題があります.つまり、ページの中にiframeのフレームワークがあれば、このiframeのロードが完了すれば、このイベントが発生します.
1if (wb.ReadyState == WebBrowserReadyState.Complete && e.Url.ToString() == wb.Url.ToString()) この判断は、コントロールのすべての内容をロードし終わって、このページでロードし終わったということで、あるiframeがロードし終わったのではありません.そして通過できます.
1wb.Document.Body.InnerHtml; コンテンツを取得しに来ました.
2)phantomjsというオープンソースを利用するプロジェクト
このプロジェクトの住所:http://phantomjs.org/.このプロジェクトの話の通俗的な点は、インタフェースなしのwebkitカーネルベースのブラウザです.ブラウザである以上、もちろん取得できます.
javascriptがロードした内容.このオープンソースプロジェクトの詳細については、みんな自分でこの文書を読みに来てください.
まず簡単に紹介します.このプロジェクトはwin 7でどう使いますか?
1、windowsバージョン、住所をダウンロードします.http://phantomjs.org/download.html現在のバージョンは1.9.1です.
2、ダウンロードし終わったら、解凍して、あるフォルダの下に置く.
3、環境変数を設定して、このフォルダのルートディレクトリを環境変数に配置します.
ここではProcess類を使って、コードを確認します.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19Process p = newProcess();             //             p.StartInfo.FileName = @"cmd.exe";             p.StartInfo.UseShellExecute = false;             p.StartInfo.RedirectStandardInput = true;             p.StartInfo.RedirectStandardOutput = true;             p.StartInfo.RedirectStandardError = true;             p.StartInfo.CreateNoWindow = true;             p.Start();             //             p.StandardInput.WriteLine(@"cd D:\Program Files\phantomjs\examples");             p.StandardInput.WriteLine(@"d:");             p.StandardInput.WriteLine("phantomjs --output-encoding=gbk test.js www.xxxx.com");             p.StandardInput.Close();             p.StandardInput.Dispose();             //             stringstrRst = p.StandardOutput.ReadToEnd();             p.Close();             Console.WriteLine(strRst); 上のコードにtest.jsのファイルが使われていますが、このファイルの書き方はphantomjsのapiまたはそれが持っている例を参考にしてください.簡単で分かりやすいです.
ttestjsのコード
1
2
3
4
5
6
7
8
9
10
11
12
13var page = require('webpage').create(),             system = require('system'),             url; url = system.args[1]; page.open(url, function(status) {     vartitle = page.evaluate(function() {         returndocument.getElementById('contact').innerHTML;         //return document.title;     });     console.log('Page title is '+ title);     // , c#     phantom.exit(); }); 
3)phantomjsのパッケージクラスを利用する
このクラスはとても全面的で、各種のブラウズに基づく駆動があって、もちろんphantomjsも含んで、私達はPhotomJSDriver種類を使って操作します.もちろんこのクラスは情報が多いです.皆さんが必要です.
自分から見ても、私も少し見ました.詳しくは見ていませんでした.もちろん、まずクラスライブラリをダウンロードします.住所:http://docs.seleniumhq.org/download/をクリックします.
(3.5と4.0のバージョンしかないようですが、古いバージョンでは2.0をサポートしていますか?)http://selenium.googlecode.com/git/docs/api/dotnet/index.html下はコールを見てください.簡単です.コードは何行で解決できますか?
1
2
3
4
5PhantomJSDriver driver = driver = newPhantomJSDriver(); driver.Url = "url"; string pagesource = driver.PageSource; driver.Quit(); driver.Dispose(); 以上の3つの方法は全部間違えてテストして使えます.