Mir*_*rod 2 php parsing simple-html-dom phpquery
我试图使用PHPquery来抓取网页(free-lance.ru)
Simple HTML Dom中的Equiv代码正在工作:
include('simple_html_dom.php');
$shd = str_get_html($html);
$projects = array();
$i = 0;
foreach ($shd->find('.project-preview') as $work){
$projects[$i]['name'] = $work->find('h3', 0)->children(1)->plaintext;
$i++;
}
Run Code Online (Sandbox Code Playgroud)
但我需要它在PHPQuery中.
我尝试使用类似的东西:
include('phpQuery.php');
$pq = phpQuery::newDocument($html);
foreach ($pq->find('.project-preview') as $work){
echo 'wow';
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用... sizeof($ pq-> find('.project-preview'))为0
我将非常感谢任何帮助.
我有同样的问题!所以回答这个问题的下一个访问者.
简单的HTML Dom有一些内存泄漏问题.当你通过选择器"克隆"对象时,你必须非常小心.躲开它!
据我所知,使用phpQuery只有一个命令可以清除所有内容.
phpQuery::unloadDocuments();
Run Code Online (Sandbox Code Playgroud)
我测试了phpQuery.看起来它没有内存泄漏.内存使用率也非常低.在90 kB的文件上只有4 kB.所以看起来它实时解析并且没有内存中的文档.至少那是我发现的,我可能是错的.
还尝试创建20-30个文档并且每次都使用卸载,没有内存增加......很好!
这是我的回答:
include('phpQuery.php');
$pq = phpQuery::newDocument($html);
$projects = array();
$i = 0;
foreach ($pq['.project-preview'] as $work) {
// iteration returns PLAIN dom nodes, NOT phpQuery objects
$pqwork = pq($work);
$projects[$i]['name'] = $pqwork['div']->eq(1)->text();
// Unfortunately pq($work)['div']->eq(1)->text(); does not work
$i++;
}
phpQuery::unloadDocuments();
Run Code Online (Sandbox Code Playgroud)
如果我们有更多基本的例子,那就太好了!好的项目,糟糕的文档.或者至少我找不到解释text()函数的文档.
基准估计:
phpQuery在加载文档时快了~3.5.
简单的HTML Dom在选择时看起来快〜30%:(