2017-09-11 13 views
1

私のコードでは、HTMLコード全体を取得し、以前のウェブサイトからすべてのJavaScript(AdSenseコード)を無視しようとしています。私は約800ページを持っていて、それを一つ一つコピーするのは難しいです。私が直面している主な問題は、Xpathが長すぎて、毎回エラーが出ることです。次に、HTMLコードではなくテキストのみを出力します。私はそれを解決する方法を知らない。php xPath print html table

を出力するには、私が取得しています

/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

でご利用いただけますマイXPathの私の現在の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

あなたは

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

を使用することができ、ロードされたHTML

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