2017-01-12 149 views
-1

我想從第一個笑話都<p>要素所以基本上我做了這個腳本:PHP從網站提取數據

<?php 
$url = "http://sms.hindijokes.co"; 
$html = file_get_contents($url); 
$doc = new DOMDocument; 
$doc->strictErrorChecking = false; 
$doc->recover = true; 
@$doc->loadHTML("<html><body>".$html." 
</body>  </html>"); 
$xpath = new DOMXPath($doc); 
$query1 = "//h2[@class='entry-title']/a"; 
$query2 = "//div[@class='entry-content']/p"; 
$entries1 = $xpath->query($query1); 
$entries2 = $xpath->query($query2); 
$var1 = $entries1->item(0)->textContent; 
$var2 = $entries2->item(0)->textContent; 
echo "$var1"; 
echo "<br>"; 
$f = 5; 
for($i = 0; $i < $f; $i++){ 
echo $entries2->item($i)->textContent."\n"; 
} 
?> 

這一次我知道,有在第一個笑話,但如果有五個<p>元素我希望它是自動化的腳本,有時會多於或少於五個元素,因此會造成混亂。

+0

請參閱http://stackoverflow.com/questions/6366351/getting-dom-elements-by-classname –

回答

0

您需要先div唯一p元素,讓您的查詢將是:

$entries2 = $xpath->query('//(div[@class='entry-content'])[1]/p'); 

現在,您可以用迭代循環foreach()所有p元素(提取它的HTML內容):

$innerHtml = ''; 
foreach ($entries2 as $entry) { 
    $children = $entry->childNodes; 
    foreach ($children as $child) { 
     $innerHtml .= $child->ownerDocument->saveXML($child); 
    } 
} 
$innerHtml = str_replace(["\r\n", "\r", "\n", "\t"], '', $innerHtml); 
+0

如何獲得HTML內容太..像p元素是這樣的(不少於大於) –

+0

我如何從p元素包含html內容?因爲他們是
需要包括... –

+0

@AliveColdJuan檢查我編輯的答案,如果它提取內部html內容。它基於我的舊代碼,現在我不確定它是否按我預期的那樣工作。 – shudder

0

DOMXPath::query返回DOMNodeList對象。使用DOMNodeList::length屬性。

$f = $entries2->length; 
+0

我怎麼能包括BR你能幫我自己的一些
在p標籤 –

0

試試這種方式,它返回到null;但一些笑話有多個p標籤,以便其更好地爲您通過您的自定義找到它class/id

$i = 0; 
while($entries2->item($i)->textContent!=NULL) { 
    echo "<br>"; 
    echo $i." ".$entries2->item($i)->textContent; 
    $i++; 
}