AJAXページ。
概要:
すべての画面スクレイピングでは、最初にリソースを抽出するページを手動で確認する必要があります。 AJAXを扱う場合、通常は単にHTMLだけでなく、もう少し分析する必要があります。
AJAXを扱うとき、これは単にあなたが望む値があなたが要求した最初のHTMLドキュメントにないことを意味しますが、あなたが望む余分な情報をサーバに求めるjavascriptが実行されます。
したがって、通常は単にJavaScriptを分析し、JavaScriptがどのリクエストを行うかを確認し、最初から代わりにこのURLを呼び出すだけです。
例:
これを例に取ります。スクレイピングするページに次のスクリプトがあると仮定します。
<script type="text/javascript">
function ajaxFunction()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}
xmlHttp.open("GET","time.asp",true);
xmlHttp.send(null);
}
</script>
次に、代わりに同じサーバーのtime.aspにHTTPリクエストを行うだけです。 w3schoolsの例 。
C++による高度なスクレイピング:
複雑な使用方法で、C++を使用している場合は、Firefox JavaScriptエンジン SpiderMonkey を使用してページでJavaScriptを実行することも検討できます。
Javaによる高度なスクレイピング:
複雑な使用方法で、Javaを使用している場合は、Java Rhino
。NETによる高度なスクレイピング:
複雑な使用法の場合、および.Netを使用している場合は、Microsoft.vsaアセンブリの使用も検討できます。最近ICodeCompiler/CodeDOMに置き換えられました。
私の意見では、最も簡単な解決策は Casperjs を使用することです。これは、WebKitヘッドレスブラウザーphantomjsに基づくフレームワークです。
ページ全体がロードされ、Ajax関連のデータを非常に簡単にスクレイピングします。この基本的なチュートリアルを確認して学習することができます PhantomJSとCasperJSによるスクレイピングの自動化
また、Googleの提案キーワードをこすり落とす方法については、このサンプルコードをご覧ください。
/*global casper:true*/
var casper = require('casper').create();
var suggestions = [];
var Word = casper.cli.get(0);
if (!Word) {
casper.echo('please provide a Word').exit(1);
}
casper.start('http://www.google.com/', function() {
this.sendKeys('input[name=q]', Word);
});
casper.waitFor(function() {
return this.fetchText('.gsq_a table span').indexOf(Word) === 0
}, function() {
suggestions = this.evaluate(function() {
var nodes = document.querySelectorAll('.gsq_a table span');
return [].map.call(nodes, function(node){
return node.textContent;
});
});
});
casper.run(function() {
this.echo(suggestions.join('\n')).exit();
});
理解できたら、DOMツリーを調べてみてください。 Selenium は、ページのテストの一部としてこれを行います。また、ボタンをクリックしてリンクをたどる機能もあり、便利な場合があります。
Ajaxを使用してWebページを、またはJavascriptを使用して一般的なページをスクレイピングする最良の方法は、ブラウザー自体またはヘッドレスブラウザー(GUIのないブラウザー)を使用することです。現在、 phantomjs は、WebKitを使用したよく知られたヘッドレスブラウザです。私が成功して使用した代替手段は、 HtmlUnit (in Javaまたは.NET via [〜#〜] ikvm [〜#〜] 、これはシミュレートされたブラウザです。別の既知の代替手段は、 Selenium 。
ウェブスクレイピングAjaxおよびJavascriptサイト および 自動ブラウザレスOAuth Twitterの認証 。最初の記事の終わりには、2011年以降にコンパイルしてきた多くの追加リソースがあります。
私は PhearJS が好きですが、それは私がそれを作ったからかもしれません。
つまり、バックグラウンドで実行するサービスであり、HTTP(S)を使用して、必要なメタデータを含め、ページをJSONとしてレンダリングします。
Ajaxページに依存します。画面スクレイピングの最初の部分は、ページの動作を決定することです。ページからすべてのデータを要求するために反復できる変数のようなものはありますか?個人的に私は Web Scraper Plus をスクリーンスクレイピング関連のタスクの多くに使用しました。
サイドノート:使用条件はおそらくこれを行う前に確認したいところです。すべてのサイトを反復処理するサイトによっては、いくつかのフラグが立てられる場合があります。
低コストのソリューションとして、 SWExplorerAutomation (SWEA)を試すこともできます。このプログラムは、HTML、DHTML、またはAJAXで開発されたWebアプリケーション用の自動化APIを作成します。
ブライアンR.ボンディの答えは、ソースコードが読みやすいときに役立ちます。 WiresharkやHttpAnalyzerなどのツールを使用してパケットをキャプチャし、「ホスト」フィールドと「GET」フィールドからURLを取得する簡単な方法を好みます。
たとえば、次のようなパケットをキャプチャします。
GET /hqzx/quote.aspx?type=3&market=1&sorttype=3&updown=up&page=1&count=8&time=164330
HTTP/1.1
Accept: */*
Referer: http://quote.hexun.com/stock/default.aspx
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: quote.tool.hexun.com
Connection: Keep-Alive
次に、URLは次のとおりです。
http://quote.tool.hexun.com/hqzx/quote.aspx?type=3&market=1&sorttype=3&updown=up&page=1&count=8&time=164330
Selenium WebDriverは優れたソリューションです。ブラウザーをプログラムし、ブラウザーで行う必要のあることを自動化します。ブラウザ(Chrome、Firefoxなど)は、Seleniumで動作する独自のドライバーを提供します。自動化されたREAL browserとして機能するため、ページ(javascriptおよびAjaxを含む)は、そのブラウザーを使用する人間と同じようにロードされます。
欠点は、処理が遅いということです(その単一ページでスクレイピングを行う前に、すべての画像とスクリプトがロードされるのを待ちたいと思うでしょう)。
Ajaxページをスクレイプするための回答として、以前はMITの溶媒とEnvJSにリンクしていました。これらのプロジェクトにはアクセスできなくなっているようです。
まったくの必要性から、私は実際にAjaxページをスクレイピングする別の方法を発明しました。そして、ヘッドレスjavascriptエンジンを見つけてデータを表示しないメソッドを持つfindthecompanyのような厳しいサイトで機能しました。
テクニックは、chrome拡張機能を使用してスクレイピングを実行することです。Chrome拡張機能は、JavaScriptで修正されたDOMへのアクセスを実際に許可するため、Ajaxページ。テクニックは次のとおりです、私は確かにいつかコードをオープンソースにします。chromeエクステンションを作成します(あなたがそれを作成する方法とそのアーキテクチャと機能を知っていると仮定します。サンプルがたくさんあるので練習してください)、
あなたが理解できない場合はコメントしてください、私はそれをより良く書くことができます。 ( 最初の試み )。また、できるだけ早くサンプルコードをリリースしようとしています。