drghhp8706 2014-01-26 07:43
浏览 89
已采纳

使用来自rss Feed的php抓取图像

PHP

$rss = new DOMDocument();
$rss->load('http://www.autoexpress.co.uk/feeds/all');
$feed = array();
foreach ($rss->getElementsByTagName('item') as $node) {
  $item = array (
    'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
    'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
    'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
    'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
    'image' => $node->getElementsByTagName('whattagdoiaddhere')->item(0)->nodeValue,
  );
  array_push($feed, $item);
}
$limit = 3;
for($x=0;$x<$limit;$x++) {
  $title = str_replace(' & ', ' &amp; ', $feed[$x]['title']);
  $link = $feed[$x]['link'];
  $description = $feed[$x]['desc'];
  $date = date('l F d, Y', strtotime($feed[$x]['date']));
  echo '<div class="news-row-index">';
  echo '<div class="img"><a href="'.$link.'" target="_blank" title="'.$title.'"><img src="'.$image.'" height="79" width="89"></a></div>';
  echo '<div class="details-index"><p><h5><a href="'.$link.'" target="_blank" title="'.$title.'">'.$title.'</a></h5><br />';
  echo '<small><em>Posted on '.$date.'</em></small></p>';
  echo '<p>'.$description.'</p></div>';
  echo '</div>';
}
  1. I am trying to get the images from this rss but don't know exactly how to get the image and add it into the <div class="img".
  2. Also i have a problem because the image is being received but it's located in the $description variable.
  3. Tried searching and found php rss feed show images but when i add the code from that answer I get nothing in the rss module. Please help me I really appreciate it.
  • 写回答

1条回答 默认 最新

  • douchen7555 2014-01-26 08:11
    关注

    You can make use of DomDocument loadHTML to parse the description field and grab the image tags.

    foreach ($rss->getElementsByTagName('item') as $node) {
      $htmlStr = $node->getElementsByTagName('description')->item(0)->nodeValue;
      $html = new DOMDocument();        
      $html->loadHTML($htmlStr);
       //get the first image tag from the description HTML
       $img = $html->getElementsByTagName('img')->item(0)->getAttribute('src');
       $item = array (
        'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
        'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
        'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
        'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
        'image' => $img,
      );
      array_push($feed, $item);
    }
      print_r($feed);
    

    Also to check if the DOMNodeList is empty, try

    foreach ($rss->getElementsByTagName('item') as $node) {
          $htmlStr = $node->getElementsByTagName('description')->item(0)->nodeValue;
          $html = new DOMDocument();        
          $html->loadHTML($htmlStr);
           //get the first image tag from the description HTML
            $imgTag = $html->getElementsByTagName('img');
            $img = ($imgTag->length==0)?'noimg.png':$imgTag->item(0)->getAttribute('src');
           $item = array (
            'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
            'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
            'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
            'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
            'image' => $img,
          );
          array_push($feed, $item);
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系