从基于类的外部html读取

时间:2013-02-01 22:03:02

标签: php html dom

我尝试从html页面的外部来源中提取4G Network实际为LTE 700 MHz Class 17 / 1700 / 2100 - for AT&T的整行,但在其他情况下,它可能会更像LTE 850 / 900 / 1700 / 2100或其他。{ / p>

我的结果标题始终稳定(4G Network)且位于<td class="ttl">之下且结果位于<td class="nfo">级之下,但它们都在<tr>下,所以我认为基于标题ttl class可以阅读在nfo class

下创建的内容

这是外部html的来源:

<tr>
<th rowspan="8" scope="row">General</th>
<td class="ttl"><a href="network-bands.php3">2G Network</a></td>
<td class="nfo">CDMA 800 / 1900 </td>
</tr><tr>
<td class="ttl">&nbsp;</td>
<td class="nfo">GSM 900 / 1800 / 1900 </td>
</tr>
<tr>
<td class="ttl"><a href="network-bands.php3">3G Network</a></td>
<td class="nfo">HSDPA 2100 </td>
</tr>
<tr>
<td class="ttl">&nbsp;</td>
<td class="nfo">CDMA2000 1xEV-DO </td>
</tr>
<tr>
<td class="ttl"><a href="network-bands.php3">4G Network</a></td>
<td class="nfo">LTE 700 MHz Class 17 / 1700 / 2100 - for AT&amp;T</td>
</tr><tr>
<td class="ttl"><a href="glossary.php3?term=sim">SIM</a></td>
<td class="nfo">Micro-SIM</td>
</tr><tr>
<td class="ttl"><a href="#" onclick="helpW('h_year.htm');">Announced</a></td>
<td class="nfo">2012, October</td>
</tr>

这是我使用的代码:

<?php
include_once('/simple_html_dom.php');
$dom = file_get_html("http://www.externalsite.com/pantech_vega_no_6-5268.php");
// alternatively use str_get_html($html) if you have the html string already...
 foreach ($dom->find('td[class=nfo]') as $node)
{
$result = $node->innertext;
$bresult = explode(",", $result);
echo $bresult[0];
} 
?>

我的代码的结果是:

CDMA 800 / 1900 GSM 900 / 1800 / 1900 HSDPA 2100 CDMA2000 1xEV-DO LTE 700 MHz Class 17 / 1700 / 2100 - for AT&T Micro-SIM 2012, October

3 个答案:

答案 0 :(得分:1)

如果你只想获得4G网络,你应该这样做:

<?php
include_once('/simple_html_dom.php');
$dom = file_get_html("http://www.gsmarena.com/pantech_vega_no_6-5268.php");
foreach ($dom->find('tr') as $node) {
    if (is_a($node->children(0), 'simple_html_dom_node')) {
        if ($node->children(0)->plaintext == "4G Network") {
            echo $node->children(1)->plaintext;
        }
    }
}
?>

答案 1 :(得分:0)

当您只想要第一个结果时,您正在遍历所有结果。所以不要循环并得到第一个结果:

$results = $dom->find('td[class=nfo]');
$node = reset($results);    // get the first element of the array
//the rest of your code:
$result = $node->innertext;
// etc.

答案 2 :(得分:0)

您只需要第一个结果,这样您就可以在找到并获得结果后停止

foreach ($dom->find('td[class=nfo]') as $node){
   $result = $node->innertext;
   break;
}