2014-12-27 77 views
1

我想從外部鏈接的div類獲取信息 我該怎麼做?從外部文件獲取Div php

<div class="item-list"><h3>répartitions des gains</h3><ul id="partages" class="partages-gain"><li class="partage_header first"><div class="part_label">Combinez :</div><div class="num_gain">Nombre de gains</div><div class="lots">Lot (Rs)</div></li> 
<li class="partage_number"><div class="part_label">6 des 6</div><div class="num_gain">0</div><div class="lots">0</div></li> 
<li class="partage_number"><div class="part_label">5 des 6</div><div class="num_gain">59</div><div class="lots">11 776</div></li> 
<li class="partage_number"><div class="part_label">4 des 6</div><div class="num_gain">3 093</div><div class="lots">463</div></li> 
<li class="partage_number"><div class="part_label">3 des 6</div><div class="num_gain">48 021</div><div class="lots">100</div></li> 
<li class="partage_total last"><div class="part_label">Total</div><div class="num_gain">51 173</div><div class="lots">6 928 943</div></li> 
</ul></div> </div> 

以上是外部鏈接源代碼 我試圖在num_gain這是0獲得例如但5num_gain類並將其存儲到一個變量,然後將它發送到我的數據庫。

+1

你想要檢索什麼信息? –

+1

考慮使用http://php.net/manual/en/class.domdocument.php處理來自外部網站的html文檔。 – Erik

+0

使用dom解析器。見[this](http://php.net/manual/en/class.domdocument.php)和[this](http://php.net/manual/en/book.simplexml.php) – andrew

回答

1

您可以使用DOMDocumentDOMXpath爲此,我寫了這個功能正從它返回一個數組

function getContentByClassName($html, $classname) { 
    $content = array(); 
    $dom = new DomDocument(); 
    @$dom->loadHTML($html); 
    $finder = new DomXPath($dom); 

    $nodes = $finder->query("//*[contains(@class, '$classname')]"); 

    foreach($nodes as $node){ 
     $content[] = $node->nodeValue; 
    } 
    return $content; 
} 

使用

$html = file_get_contents('your external link'); 
$class = 'num_gain'; 
var_dump(getContentByClassName($html, $class)); 

輸出

array (size=6) 
    0 => 'Nombre de gains' 
    1 => '0' 
    2 => '59' 
    3 => '3 093' 
    4 => '48 021' 
    5 => '51 173' 
0

類的名稱內容我不確定您的問題是否提取了一個數字值lue或多個關於類名「num_gain」的div標籤的標籤。所以,我爲每一個可能的答案,如下:

如果你想在「num_gain」 div標籤提取零,我建議這樣的代碼:

<?php 
$html = file_get_contents("http://www.example.com/page_with_divs.html"); 
preg_match("/class=\"num_gain\">([0-9])<\//",$html,$matches); 
$result = $matches[1]; // 0 

注意,變量賦值可選的。我主要是爲了代碼可讀性而傾向於使用它。

該代碼使用preg_match()與正則表達式。正則表達式模式排除與第一個num_gain DIV的匹配,因爲它包含非數字數據,即「Nombre de gains」。該模式與下一個指定的DIV標籤匹配,因爲其文本由一個數字組成,即零。

如果你做的var_dump(的$matches),它產生以下結果:

array (size=2) 
    0 => string 'class="num_gain">0</' (length=20) 
    1 => string '0' (length=1) 

的零元素包含匹配的正則表達式模式正好而下一元素包含圖案的部分字符串在括號的幫助下被「記住」。因此,$matches[1]包含要存儲在數據庫中的期望值。

如果您的問題實際上涉及到訪問中num_gain類DIV標籤的數字數據,那麼你可以編寫如下代碼,這使得使用preg_match_all()的

<?php 
$html = file_get_contents("http://www.example.com/page_with_divs.html"); 
preg_match_all("/class=\"num_gain\">([0-9][0-9 ]*)<\//",$html,$matches); 

matches[1]現在包含以下陣列:

array (
    0 => '0', 
    1 => '59', 
    2 => '3 093', 
    3 => '48 021', 
    4 => '51 173', 
) 

小心的詞,而網頁抓取在技術上是很容易做到,你應該確保該活動是法律允許的。