0

オランダのニュースウェブサイトがあります:nu.nl 私は彼女の上にある最初のURLの見出しを取得することに非常に興味があります:

<h3 class="hdtitle">
          <a style="" onclick="NU.AT.internalLink(this, event);" xtclib="position1_article_1" href="/buitenland/2880252/griekse-hotels-ontruimd-bosbranden.html">
            Griekse hotels ontruimd om bosbranden            <img src="/images/i18n/nl/slideshow/bt_fotograaf.png" class="vidlinkicon" alt="">          </a>
        </h3> 

だから私の質問はどうやってこのURLを取得するのですか?Jqueryでこれを行うことはできますか?それが私のサーバー上にないので、私はそうは思わないでしょう。それで、多分私はPHPを使わなければならないでしょうか?どこから始めればいいの…?

4

5 に答える 5

3

テストされ、動作しています

http://www.nu.nlはサイトではないため、プロキシ方式を使用してクロスドメインを実行できます。そうしないと、次のようなエラーが発生します。 GETPHP

XMLHttpRequestはhttp://www.nu.nl/をロードできません。Origin http://yourdomain.comは、Access-Control-Allow-Originでは許可されていません。

まず、PHP側のサーバーでこのファイルを使用します。

proxy.php(更新)

<?php
if(isset($_GET['site'])){
  $f = fopen($_GET['site'], 'r');
  $html = '';
  while (!feof($f)) {
    $html .= fread($f, 24000);
  }
  fclose($f);
  echo $html;
}
?>

これで、 jQueryを使用するjavascript側で、次のことができます。

(私が使用しているのは、 prop();jQuery 1.7.2バージョンを使用しているためです。したがって、 1.6.xより前のバージョンを使用している場合は、attr();代わりに試してください)

$(function(){

   var site = 'http://www.nu.nl';

   $.get('proxy.php', { site:site }, function(data){

      var href = $(data).find('.hdtitle').first().children(':first-child').prop('href');
      var url = href.split('/');
      href = href.replace(url[2], 'nu.nl');

      // Put the 'href' inside your div as a link
      $('#myDiv').html('<a href="' + href + '" target="_blank">' + href + '</a>');

   }, 'html');

});

ご覧のとおり、リクエストはドメイン内にありますが、一種のトリッキーなものであるため、Access-Control-Allow-Originエラーが再発することはありません。


アップデート

コメントに書き込んだとおりにすべての見出しを取得したい場合hrefは、次のようにすることができます。

このようにjQueryコードを変更するだけです...

$(function(){

   var site = 'http://www.nu.nl';

   $.get('proxy.php', { site:site }, function(data){

        // get all html headlines
        headlines = $(data).find('.hdtitle');

        // get 'href' attribute of each headline and put it inside div
        headlines.map(function(elem, index){ 
            href = $(this).children(':first-child').prop('href');
            url = href.split('/');
            href = href.replace(url[2], 'nu.nl');
            $('#myDiv').append('<a href="' + href + '" target="_blank">' + href + '</a><br/>');
        });

   }, 'html');

});

更新されたproxy.phpファイルを使用します(どちらの場合も、1つまたはすべての見出し)。

お役に立てれば :-)

于 2012-08-09T16:24:07.747 に答える
1

RSSを提案したかったのですが、残念ながら、探している見出しがそこに表示されていないようです。

<?

$f = fopen('http://www.nu.nl', 'r');
$html = '';
while(strpos($html, 'position1_article_1') === FALSE)
    $html .= fread($f, 24000);
fclose($f);
$pos = strpos($html, 'position1_article_1');
$urlleft = substr($html, $pos + 27);
$url = substr($urlleft, 0, strpos($urlleft, '"'));
echo 'http://www.nu.nl' . $url;

?>

出力:http ://www.nu.nl/buitenland/2880252/griekse-hotels-ontruimd-bosbranden.html

于 2012-08-09T15:18:29.843 に答える
1

simplehtmldomライブラリを使用してそのリンクを取得できます

そんな感じ

$html = file_get_html('website_link');
echo $html->getElementById("hdtitle")->childNodes(1)->getAttribute('href');

詳細はこちら

于 2012-08-09T15:16:38.330 に答える
0

cURLを使用してページを取得します。次に、次の関数を使用して、指定した文字列を解析します。

preg_match("/<a.*?href\=\"(.*?)\".*?>/is",$text,$matches);

結果のURLは$matches配列になります。

于 2012-08-09T15:14:23.763 に答える
0

ブラウザを介してページをスクレイプするようにjQueryボットを設定する場合(Google Chrome拡張機能ではこの機能が可能です):

// print out the found anchor link's href attribute
console.log($('.hdtitle').find('a').attr('href'));

hrefPHPを使用する場合は、このリンクのページをスクレイプする必要があります。これを実現するには、などのライブラリを使用しますSimpleTest。定期的にスクレイプする最良の方法は、PHPスクリプトもにリンクするcronjobことです。

SimpleTesthttp ://www.lastcraft.com/browser_documentation.php

cronjob: http: //net.tutsplus.com/tutorials/php/managing-cron-jobs-with-php-2/

幸運を!

于 2012-08-09T15:07:50.877 に答える