【问题标题】:Extract href from html page using php使用php从html页面中提取href
【发布时间】:2017-04-01 12:23:30
【问题描述】:

我尝试使用下面的代码提取新闻标题和每个标题的链接 (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>';
}
?>

提前感谢您的帮助!

【问题讨论】:

    标签: php html parsing


    【解决方案1】:

    尝试这样做:

    <?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 />';
       }
      }
    ?>
    

    【讨论】:

    • 感谢您的回答。您的代码与网页中的一些链接相呼应,但它们不属于头条新闻(新闻发布)。我在问题中粘贴的代码与所有新闻(标题)相呼应,但没有相应标题的链接。我试图玩弄你的代码(包括更改 $hrefs,但它没有用)。当您有足够的时间时,请再试一次。再次感谢!
    • 很抱歉,我无法访问网页,因此无法测试代码。
    【解决方案2】:

    我找到了解决方案。就是这样:

    <?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>';
    
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2013-10-28
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      相关资源
      最近更新 更多