2017-09-11 74 views
1

在我的代碼中,我試圖獲取HTML代碼中的整個代碼,並忽略了我的舊網站上的所有JavaScript代碼(AdSense代碼)。我有大約800頁,我很難一一複製。我面臨的主要問題是我的Xpath太長,每次都會給我一個錯誤,其次它只打印文本而不是HTML代碼。我不知道如何解決它。php xPath打印整個html表格

我的XPath

/html/body/div/div/div/div[4]/table/tbody/tr/td/div/h2/table/tbody/tr/td/div[1]/table/tbody/tr/td[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/div/table/tbody/tr/td/div 

錯誤我得到可在https://pastebin.com/FFRLr3vq

我目前的PHP代碼

error_reporting(E_ERROR); 
$urls[] = "http://myoldwebsite.com/somepage.html"; 

function curlload($url) { 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL,$url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); 
     $source = curl_exec($ch); 
     return $source; 
} 

foreach ($urls as $url) { 
$source = curlLoad($url); 
@$doc = new DOMDocument(); 
@$doc->loadHTML($source); 

$xpath = new DomXPath($doc); 
$nodeList = $xpath->query("//div[@class='pageContent']"); 

// To check the result: 
echo "<p>" . $node->nodeValue . "</p>"; 
} 
+0

是否表有什麼屬性,你的連接到?你可以請張貼表格來源嗎?這會幫助我更好地幫助你。 – IamBatman

+0

@IamBatman你可以請檢閱我的更新php代碼 – Rtra

+0

@Rtra offtopic:你應該重命名你的函數爲'curlLoad'或稱之爲'curlload' - 但不要混淆案件。不要使用'@'來抑制錯誤。這是不好的做法。 – Xatenev

回答

1

要輸出的加載HTML就可以使用

http://php.net/manual/de/domdocument.savehtml.php

要刪除script標籤(如聊天討論),你可以使用類似的東西:

<?php 

$html = <<<HTML 
... 
HTML; 

$dom = new DOMDocument(); 

$dom->loadHTML($html); 

$script = $dom->getElementsByTagName('script'); 

$remove = []; 
foreach($script as $item) 
{ 
    $remove[] = $item; 
} 

foreach ($remove as $item) 
{ 
    $item->parentNode->removeChild($item); 
} 

$html = $dom->saveHTML(); 

來源&更多信息:remove script tag from HTML content