使用php从html页面中提取href

时间:2016-11-17 19:45:04

标签: php html parsing

我尝试使用下面的代码提取新闻标题和每个标题的链接(href),但链接提取不起作用。这只是标题。请帮我找出代码有什么问题。

链接到我想从中获取标题和链接的页面: http://web.tmxmoney.com/news.php?qm_symbol=BCM

<?php
$data = file_get_contents('http://web.tmxmoney.com/news.php?qm_symbol=BCM');
$dom = new domDocument;
@$dom->loadHTML($data);
$dom->preserveWhiteSpace = true;
$xpath = new DOMXPath($dom);
$rows = $xpath->query('//div');

foreach ($rows as $row) {

    $cols = $row->getElementsByTagName('span');

    $newstitle = $cols->item(0)->nodeValue;

    $link = $cols->item(0)->nodeType === HTML_ELEMENT_NODE ? $cols->item(0)->getElementsByTagName('a')->item(0)->getAttribute('href') : '';

echo $newstitle . '<br>';
echo $link . '<br><br>';
}
?>

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

尝试这样做:

<?php
  $data= file_get_contents('http://web.tmxmoney.com/news.php?qm_symbol=BCM');

  $dom = new DOMDocument();
  @$dom->loadHTML($data);
  $xpath = new DOMXPath($dom);
  $hrefs= $xpath->query('/html/body//a');

  for($i = 0; $i < $hrefs->length; $i++){
   $href = $hrefs->item($i);
   $url = $href->getAttribute('href');
   $url = filter_var($url, FILTER_SANITIZE_URL);

   if(!filter_var($url, FILTER_VALIDATE_URL) === false){
      echo '<a href="'.$url.'">'.$url.'</a><br />';
   }
  }
?>

答案 1 :(得分:0)

我找到了解决方案。在这里:

<?php

$data = file_get_contents('http://web.tmxmoney.com/news.php?qm_symbol=BCM');
$dom = new domDocument;
@$dom->loadHTML($data);
$dom->preserveWhiteSpace = true;
$xpath = new DOMXPath($dom);
$rows = $xpath->query('//div');

foreach ($rows as $row) {

    $cols1 = $row->getElementsByTagName('a');

    $link = $cols1->item(0)->nodeType === XML_ELEMENT_NODE ? $cols1->item(0)->getAttribute('href') : '';

    $cols2 = $row->getElementsByTagName('span');

    $title = $cols2->item(0)->nodeValue;
    $source = $cols2->item(1)->nodeValue;

echo $title . '<br>';
echo $source . '<br>';
echo $link . '<br><br>';

}
?>