web-dev-qa-db-ja.com

Webページを開き、JavaScriptを使用して解析します

JavaScriptが新しいウィンドウでリンクを開くことができることは知っていますが、ウィンドウで開いたりユーザーに表示したりせずにWebページを開くことはできますか?私がやりたいのは、そのWebページを解析してテキストを取得し、それを変数として使用することです。

これは可能ですかなしサーバー側言語からの助けはありますか?もしそうなら、私がこれを達成できる方向に私を送ってください。

皆さんありがとう

28
Abs

XMLHttpRequest オブジェクトを使用してこれを行うことができます。ここに簡単な例があります

var req = new XMLHttpRequest();  
req.open('GET', 'http://www.mydomain.com/', false);   
req.send(null);  
if(req.status == 200)  
   dump(req.responseText);

ロードされたら、req.responseTextメンバーで javascript正規表現 を使用して解析/スクレイピングを実行できます。

もっと詳しく...

実際には、クロスプラットフォームの方法でXMLHttpRequestオブジェクトを取得するために、もう少し行う必要があります。例:

var ua = navigator.userAgent.toLowerCase();
if (!window.ActiveXObject)
  req = new XMLHttpRequest();
else if (ua.indexOf('msie 5') == -1)
  req = new ActiveXObject("Msxml2.XMLHTTP");
else
  req = new ActiveXObject("Microsoft.XMLHTTP");

またはライブラリを使用して...

別の方法として、煩わしい作業をすべて省き、 jQuery または Prototype のようなライブラリを使用するだけでこれを処理できます。

同じ起源のポリシーはあなたを噛むかもしれません...

same-Originポリシー のため、リクエストするページは、リクエストを行うページと同じドメインからのものである必要があります。リモートページを要求する場合は、サーバー側のスクリプトを介してプロキシする必要があります。

考えられる別の回避策は、Flashを使用して要求を行うことです。これにより、ターゲットサイトが適切に構成されたcrossdomain.xmlファイルで許可を与える場合、クロスドメイン要求が許可されます。

同じ起源のポリシーの主題に関する素晴らしい記事は次のとおりです。

31
Paul Dixon

どんなオリジンもオープンソースライブラリであり、純粋にJavascriptを使用してスクレイピングを行うことができます。また、「同じドメインの元」の問題も解決します。 http://www.whateverorigin.org/

$.getJSON('http://whateverorigin.org/get?url=' + encodeURIComponent('http://google.com') + '&callback=?', function(data){
    alert(data.contents);
});
7
guest

AJAXを使用します。これにより、問題のURLに対するGetリクエストが作成され、応答HTMLが返されます。 jqueryはこれを非常に簡単にします。

$.get("test.php");

http://docs.jquery.com/Ajax

アンドリュー

3
REA_ANDREW

新しいウィンドウをiframeで開くことができます。

http://www.w3schools.com/TAGS/tag_iframe.asp

ただし、開いているサイトが別のURLからのものである場合、JavaScriptアクセスは制限されます。これは、クロスサイトスクリプティング攻撃を防ぐためです。

http://en.wikipedia.org/wiki/Cross-site_scripting

2
Chris