【问题标题】:get contents from div class span from other website从其他网站的 div 类 span 中获取内容
【发布时间】:2012-10-14 02:09:18
【问题描述】:

我正在尝试从外部其他域的 span、class、div 中获取内容到我的个人网站。网站www.example.com的源代码是

    <div id="h_gold" class="h_metal">
      <div class="hm_inside">
        <div class="hm_title">Gold</div>
        <span class="arr_price_down">- 13.42 <img src="images/downarrow.jpg" alt="down" /></span>
        <div class="clear"></div>
        <div class="hm_cad">USD</div>
        <div class="hm_bottom">
          <div> Bid<br />
            <span>$1,749.20</span> </div>
          <div class="ask"> Ask<br />
            <span>$1,750.20</span> </div>
        </div>
        <!-- .hm_bottom-->
      </div>
      <!-- hm_inside-->
    </div>
    <!-- h_metal-->
    <div id="h_silver" class="h_metal">
      <div class="hm_inside">
        <div class="hm_title">Silver</div>
        <span class="arr_price_down">- 0.54 <img src="images/downarrow.jpg" alt="down" /></span>
        <div class="clear"></div>
        <div class="hm_cad">USD</div>
        <div class="hm_bottom">
          <div> Bid<br />
            <span>$33.40</span> </div>
          <div class="ask"> Ask<br />
            <span>$33.50</span> </div>
        </div>
        <!-- .hm_bottom-->
      </div>
      <!-- hm_inside-->
    </div>
    <!-- h_metal-->

我这里有问题..我尝试了以下代码..但它没有循环,我只从第一个 获取内容,其余部分不在输出中,

    <?php
    function get_string_between($string, $start, $end)
    {
        $string = " ".$string;
        $ini = strpos($string,$start);
        if ($ini == 0)
            return "";
        $ini += strlen($start);
        $len = strpos($string,$end,$ini) - $ini;
        return substr($string,$ini,$len);
    }
    $data = file_get_contents("http://www.example.com/ajax.php?metal_cur=USD");

    $pricediv = get_string_between($data, '<div class="hm_bottom">', '</span>');
    $pricetext = strip_tags($pricediv);
    echo $pricetext;
    ?>

其次,我再次搜索 stachoverflow,我发现一个已解决,但并不完全符合我的需求。输出还可以,但我只想将输出中的数字数据放在我定义的特定 div id 中。

    <?php 
    $page = file_get_contents('http://www.example.com/ajax.php?metal_cur=USD');
    $doc = new DOMDocument();
    $doc->loadHTML($page);
    $divs = $doc->getElementsByTagName('div');
    foreach($divs as $div) {
        // Loop through the DIVs looking for one withan id of "content"
        // Then echo out its contents (pardon the pun)
        if ($div->getAttribute('class') === 'hm_bottom') {
             echo $div->nodeValue;
        }
    }
    ?>

以上代码来自stackoverflow的第二次搜索

【问题讨论】:

  • 我想要 1,749.20 美元、1,750.20 美元等 .... 将生成的输出中的这些数字放入像
  • 之类的 div 中...
  • 这将导致
  • $1,749.20
  • ,
  • $1,750.20
  • 您的搜索目标是否希望/允许您重新使用/抓取他们的内容?偷别人的作品有点不礼貌,而且可能是非法的……
  • 标签: php file-get-contents getelementbyid


    【解决方案1】:

    你可以使用str_get_htmlfile_get_html视情况而定

    $html = str_get_html($html);
    $amounts = array();
    foreach ( $html->find("div[class=hm_bottom] span") as $span ) {
        $amount = trim($span->plaintext);
        if (strpos($amount, "\$") === 0)
            $amounts[] = $amount;
    }
    
    var_dump($amounts);
    

    输出

    array
      0 => string '$1,749.20' (length=9)
      1 => string '$1,750.20' (length=9)
      2 => string '$33.40' (length=6)
      3 => string '$33.50' (length=6)
    

    【讨论】:

    • 我试过了,但报错致命错误:在第 2 行调用 C:\xampp\htdocs\forex\6.php 中的未定义函数 str_get_html()
    • 我已经编辑了上面的问题..并提到了我所做的尝试..你可以看看
    • 因为您使用的是 URL .. 它应该是 file_get_html 而不是 str_get_html .. 它的
    • 而不是像数组 0 => string '$1,749.20' (length=9) 1 => string '$1,750.20' (length=9) 2 => string '$33.40' (length= 6) 3 => string '$33.50' (length=6), 你能帮我解决这样的问题吗....
    • ....
    • $1,749.20
    • ..
    • ....即
    • $$1,750.20
  • 你可以这样做
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签