2015-09-08 117 views
1

我試圖從一個網站上取消數據。我堅持收視率。 他們有這樣的事情:簡單的HTML DOM解析器 - 用隨機數查找類

<div class="rating-static rating-10 margin-top-none margin-bottom-sm"></div> 
<div class="rating-static rating-13 margin-top-none margin-bottom-sm"></div> 
<div class="rating-static rating-46 margin-top-none margin-bottom-sm"></div> 

哪裏rating-10實際上是一個明星,rating-13兩顆星在我的情況,rating-46將在我的腳本五顆星。

評級範圍可以從0-50。

我的計劃是創建switch,如果我從1-10的班級範圍,我會知道這是一顆星,從11-20兩顆星等等。

任何想法,任何幫助將不勝感激。

+0

其實我沒有嘗試,因爲我沒有想法。我很困難。例如,我可以通過'rating-static'類來獲取該元素,但我如何才能確定什麼是評分?我完全困惑。 @KhorneHoly 你有什麼建議嗎?我會立即嘗試。 – PottaG

+0

@PottaG試試下面的代碼,它會給你預期的輸出 –

+0

@PottaG我寫了一個答案,看看它。我沒有測試它,但它應該工作,並給你的基本思路 – KhorneHoly

回答

2

試試這個

<?php 
$data = '<div class="rating-static rating-10 margin-top-none margin-bottom-sm"></div>'; 
$dom = new DOMDocument; 
$dom->loadHTML($data); 
$xpath = new DomXpath($dom); 
$div = $dom->getElementsByTagName('div')[0]; 
$div_style = $div->getAttribute('class'); 
$final_data = explode(" ",$div_style); 
echo $final_data[1]; 
?> 

這會給你預期的輸出。

2

我有一個similiar項目,這應該是做到這一點的方式,如果你要分析整個HTML網站

$dom = new DOMDocument(); 
$dom->loadHTML($html); // The HTML Source of the website 

foreach ($dom->getElementsByTagName('div') as $node){ 

    if($node->getAttribute("class") == "rating-static"){ 

     $array = explode(" ", $node->getAttribute("class")); 
     $ratingArray = explode("-", $array[1]); // $array[1] is rating-10 

     //$ratingArray[1] would be 10 
     // do whatever you like with the information 
    } 
} 

這可能是因爲你必須在if部分更改爲strpos檢查,我沒有測試過這個腳本,但我認爲getAttribute("class")返回所有類。這將是如果語句然後

if(strpos($node->getAttribute("class"), "rating-static") !== false) 
+0

謝謝,但Keval答案是第一,我用這個 getAttribute('類') 謝謝你們我們兩個人。 – PottaG

0

僅供參考嘗試使用Querypath未來的解析需求。它只是一個PHP DOM解析器的包裝,並且工作得非常好。