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> 

所以我的问题是如何获得这个网址?我可以用 Jquery 做到这一点吗?我认为不是,因为它不在我的服务器上。所以也许我必须使用PHP?我从哪说起呢...?

4

5 回答 5

3

经过测试和工作

因为http://www.nu.nl不是你的站点,所以可以使用代理的方式做跨域 ,否则会报这种错误:GETPHP

XMLHttpRequest 无法加载http://www.nu.nl/。Access-Control-Allow-Origin 不允许来源 http://yourdomain.com 。

首先在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/greekse-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 机器人通过浏览器抓取页面(谷歌 Chrome 扩展允许这个功能):

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

如果你想使用 PHP,你需要为这个href链接抓取页面。使用诸如此类的库SimpleTest来完成此操作。定期抓取的最佳方法是将您的 PHP 脚本也链接到 a cronjob

简单测试:http : //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 回答