2012-04-23 37 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是如何佈置的,所以抓取該頁面似乎並不直接。 – 2012-04-23 21:01:52

+0

我需要得到的信息出亂碼.....家庭,屬,物種等.......並獲得每一個成mysql列的表 – Sebastian 2012-04-23 21:03:08

回答

1

這是一團糟。

但至少這是一個(有點)一致的混亂。

如果這是一次性提取而不是滾動項目,我個人會使用快速和骯髒的正則表達式而不是simple_html_dom。否則,你一整天都會在這裏與標籤交流。

例如,此正則表達式翻出了廣大標題/數據對:

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

你需要做一些前期和後期清洗的時候,才讓他們所有,但。

我不羨慕你有這個任務......

+0

我也沒有,但有時你不能選擇....非常感謝您的建議。 – Sebastian 2012-04-23 22:20:42

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); 
?>