0

我需要获取一些关于一些植物的信息并将其放入 mysql 表中。我对 Curl 和 DOM 的了解很少,但我已经做到了:

    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;

现在,我真的不知道如何从这一点搬进来,你能指导我吗?

谢谢!

4

4 回答 4

1

您最好的选择是将其包装在 php 中;)

是的,对于丑陋的 html 代码来说,这是一个丑陋的 hack。

<?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;
?>
于 2012-04-23T22:44:01.203 回答
1

这是一团糟。

但至少这是一个(有点)一致的混乱。

如果这是一次性提取而不是滚动项目,我个人会在此使用快速而肮脏的正则表达式,而不是 simple_html_dom。否则,您将整天在那里摆弄标签。

例如,这个正则表达式提取了大部分标题/数据对:

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

不过,您需要先进行一些前后清洁,然后才能将它们全部清除。

我不羡慕你有这个任务...

于 2012-04-23T22:08:10.690 回答
0

使用Simple Html Dom,您将能够访问您希望的任何元素/元素的内容。他们的 api 非常简单。

于 2012-04-23T23:42:30.980 回答
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);
?>
于 2015-06-03T08:41:34.180 回答