2012-04-23 16 views
0

私はいくつかの植物についていくつかの情報を得て、それをmysqlテーブルに入れる必要があります。 カールとDOMの私の知識は非常にヌルですが、私はこれに来ている:今Curlを使ってhtmlテーブルから情報を取得する

set_time_limit(0); 
include('simple_html_dom.php'); 


$ch = curl_init ("http://davesgarden.com/guides/pf/go/1501/"); 

curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;  rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept-Language: es-es,en")); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); 
curl_setopt($ch, CURLOPT_TIMEOUT,0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
$data = curl_exec ($ch); 
curl_close ($ch); 


$html= str_get_html($data); 


$e = $html->find("table", 8); 

echo $e->innertext; 

、私は本当にあなたが私を導いてくださいすることができ、この点から移動する方法については失われていますか?

ありがとうございます!

+0

テーブルをどのように構成するか(つまり、どの列を使用するか)を拡張できますか。そのページをスクラップすることは、HTMLがどのようにレイアウトされているかによって非常に単純ではないようです。 –

+0

私はその面倒なコードから情報を得る必要があります.....家族、属、種など.......そしてそれぞれをmysqlテーブルの列に入れます – Sebastian

答えて

1

これは混乱です。

しかし、少なくともそれは(やや)一貫性の混乱です。

これは一度だけのプロジェクトではなく、個人的には、simple_html_domの代わりにこれに素早く汚れた正規表現を使用したいと思います。それ以外の場合、あなたは一日中タグをつぶやきます。例えば

、この正規表現は、タイトル/データ対の大部分を引き出す:それはしかし、それらすべてを取得する前に、

$pattern = "/<b>(.*?)</b>\s*<br>(.*?)</?(td|p)>/si"; 

あなたは、いくつかの前と後の洗浄を行う必要があります。

私はあなたがこのタスクを持っうらやましいない...

+0

私はどちらでもありませんが、選択することができない場合もあります...アドバイスをいただきありがとうございます。 – Sebastian

1

あなたの最善の策は、PHPでこれをwrapeすることになります。)

はい、これは醜いhtmlコードのための醜いハックです。

<?php 
ob_start(); 
system(" 
    /usr/bin/env links -dump 'http://davesgarden.com/guides/pf/go/1501/' | 
    /usr/bin/env perl -lne 'm/((Family|Genus|Species):\s+\w+\s+\([\w-]+\))/ && \ 
     print $1' 
"); 
$out = ob_get_contents(); 
ob_end_clean(); 
print $out; 
?> 
0

使用Simple Html Domと、あなたが望む任意の要素/要素のコンテンツにアクセスすることができるだろう。彼らのAPIは非常に簡単です。

0

このようなものを試すことができます。

<?php 
$ch = curl_init ("http://www.digionline.ir/Allprovince/CategoryProducts/cat=10301"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$page = curl_exec($ch); 

$dom = new DOMDocument(); 
libxml_use_internal_errors(true); 
$dom->loadHTML($page); 
libxml_clear_errors(); 
$xpath = new DOMXpath($dom); 

$data = array(); 
// get all table rows and rows which are not headers 
$table_rows = $xpath->query('//table[@id="tbl-all-product-view"]/tr[@class!="rowH"]'); 
foreach($table_rows as $row => $tr) { 
    foreach($tr->childNodes as $td) { 
     $data[$row][] = preg_replace('~[\r\n]+~', '', trim($td->nodeValue)); 
    } 
    $data[$row] = array_values(array_filter($data[$row])); 
} 

echo '<pre>'; 
print_r($data); 
?> 
関連する問題