2016-12-07 34 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();