2016-12-07 73 views
0

我想利用DOMDocument從另一個網站上刮表。我在共享主機上。使用PHP進行數據分區

下面是HTML的樣子:

<tbody> 

<tr class="odd"> 
<td class="nightclub">Elleven</td> 
<td class="city">Downtown Miami</td> 
</tr> 

<tr class="even"> 
<td class="night club">Story</td> 
<td class="city">South Beach</td> 
</tr> 

</tbody> 

我試圖做:

<?php 
$domDoc = new \DOMDocument(); 
$url = "http://example.com/"; 
$html = file_get_contents($url); 
$domDoc->loadHtml($html); 

$domDoc->preserveWhiteSpace = false; 


$tables = $domDoc->getElementsByTagName('tbody'); 



$rows = $tables->item(0)->getElementsByTagName('tr'); 


foreach ($rows as $row) 
{ 

    $columns = $row->getElementsByTagName('td'); 

    print $columns->item(0)->nodeValue."/n"; 
    print $columns->item(1)->nodeValue."/n"; 
    print $columns->item(2)->nodeValue; 
} 

當我做到這一點我沒有得到結果。我認爲服務器阻止了我的請求。

+0

如果頁面不歸您所有或者您也無權這樣做,「永遠不要這樣做」。 – Ima

+0

但是,您如何認爲服務器阻止了您的請求 – Ima

+0

您應該首先啓用錯誤報告,它將以更快的速度解決99%的問題。 – DanFromGermany

回答

0

我所做的是使用開源的PHP打包的叫做Guzzle。它甚至可以讓你爬到你正在使用的網站。

如果您在共享主機上,然後下載Guzzle並將其上傳到您的服務器。

github.com/guzzle/guzzle/releases

<?php 
require 'vendor/autoload.php'; 

$client = new GuzzleHttp\Client(); 
$domDoc = new DOMDocument(); 
$url = 'http://example.com'; 

$res = $client->request('GET', $url, [ 
    'auth' => ['user', 'pass'] 
]); 


$html = (string)$res->getBody(); 


// The @ in front of $domDoc will suppress any warnings 
$domHtml = @$dom->loadHTML($html); 

    //discard white space 
    $domDoc->preserveWhiteSpace = false; 

    //the table by its tag name 
    $tables = $domDoc->getElementsByTagName('tbody'); 


    //get all rows from the table 
    $rows = $tables->item(0)->getElementsByTagName('tr'); 

    // loop over the table rows 
    foreach ($rows as $row) 
    { 
    // get each column by tag name 
     $columns = $row->getElementsByTagName('td'); 
    // echo the values 
     echo $columns->item(0)->nodeValue.'<br />'; 
     echo $columns->item(1)->nodeValue.'<br />'; 
     echo $columns->item(2)->nodeValue; 
    } 


?> 
+0

謝謝@ user3059362你這工作完美! –

1

simplehtmldomHere

// Create DOM from URL or file 
$html = file_get_html('http://www.example.com/'); 

// Find all tr 
foreach($html->find('tr') as $element) 
     echo $element->innertext . '<br>'; 

其良好的圖書館嘗試解析HTML Manual

0

如果你不介意的話,這是最簡單的解決方案。使用Simple Html Dom像下面這樣:

$html = file_get_html("WWW.YOURDOMAIN.COM"); 
$data = array(); 
foreach($html->find("table tr") as $tr){ 
    $row = array(); 
    foreach($tr->find("td") as $td){ 
     /* enter code here */ 
     $row[] = $td->plaintext; 
    } 
    $data[] = $row; 
} 

見詳細的解答here

+0

沒有協議('https')將無法工作 – DanFromGermany

-1

你的代碼是完美的只刪除\ $ domDoc = new \ DOMDocument();

嘗試

$ domDoc = new DOMDocument();