我需要获取一些植物的信息并将其放入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;
现在,我真的迷失了如何从这一点入手,你能指导我吗?
谢谢!
答案 0 :(得分:1)
这是一团糟。
但至少这是一个(有点)一致的混乱。
如果这是一次性提取而不是滚动项目,我个人会使用快速而脏的正则表达式而不是simple_html_dom。你会整天待在那里弄乱标签。
例如,这个正则表达式拉出了大多数标题/数据对:
$pattern = "/<b>(.*?)</b>\s*<br>(.*?)</?(td|p)>/si";
你需要先进行一些前后清洁,然后再将它们全部清理干净。
我不羡慕你有这个任务......
答案 1 :(得分:1)
你最好的选择是将它包装在php中;)
是的,对于丑陋的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;
?>
答案 2 :(得分:0)
使用Simple Html Dom,您就可以访问所需的任何元素/元素内容。他们的api非常简单。
答案 3 :(得分: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);
?>