私はPHPをサポートしていないので、私が開発していたプラットフォーム(電話の隙間を通したiOS)がPHPをサポートしていないことを知るまで、私はウェブスクレイピング技術をPHPで手に入れました。私はJSを通して解決策を見つけました。クリックして結果を解析するのではなく、AJAXにURLを読み込みますか?
$(document).ready(function(){
var container = $('#target');
$('.ajaxtrigger').click(function(){
doAjax($(this).attr('href'));
return false;
});
function doAjax(url){
if(url.match('^http')){
$.getJSON("http://query.yahooapis.com/v1/public/yql?"+
"q=select%20*%20from%20html%20where%20url%3D%22"+
encodeURIComponent(url)+
"%22&format=xml'&callback=?",
function(data){
if(data.results[0]){
var data = filterData(data.results[0]);
container.html(data);
} else {
var errormsg = '<p>Error: could not load the page.</p>';
container.html(errormsg);
}
}
);
} else {
$('#target').load(url);
}
}
function filterData(data){
data = data.replace(/<?\/body[^>]*>/g,'');
data = data.replace(/[\r|\n]+/g,'');
data = data.replace(/<--[\S\s]*?-->/g,'');
data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g,'');
data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g,'');
data = data.replace(/<script.*\/>/,'');
return data;
}
});
URLがロードされている方法は、リンクをクリックすることであり、それはそれのhref
だとurl
(少なくとも私は思う)を移入します。私は、http://website.com
のような静的なURLを事前に設定しておきたいです。私はすべてdoAjax(url)
をdoAjax('http://website.com)
に置き換えようとしましたが、それはうまくいかないと思います。私が間違っていることを知りたいのですが。
新しいJSスクリプトのもう1つの問題は、結果を解析してtable
要素のみを表示できるようにすることです。 PHPで、私はこれを使ってこれを行いました:
data = $html->find('table');
echo $data[1];
PHP関数のjavascriptには何が相当しますか?
サイドノートでは、私は2つのポストにこれを分割検討していたが、私はそれが今夜のためにあまりにも多くの記事:)
編集だろうと思った。まず問題はコメントで@nnnnnnにより解決しました。最初の部分については
上記のコードはリンクがクリックされたときに(doAjax()関数を呼び出すクリックハンドラを介して)動作しますが、自動的に ''http://website.com 'をクリックするだけで、doAjax(' http://website.com ');をdocument.ready関数の最後に追加するだけです。ちなみに、JSONPの "webscraping"の使い方は? – nnnnnn
ありがとう、それは最初の問題を解決します。そして、私はそれをPHPとJSの間で行っているので、私はそれをgoogledと言います。より適切な名前があるかどうかはわかりませんでした。 – Charlie