首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHPQuery的问题

使用PHPQuery的问题
EN

Stack Overflow用户
提问于 2011-02-22 09:03:44
回答 2查看 6.8K关注 0票数 2

我试着用PHPquery来刮网页(免费)

简单HTML Dom中的Equiv代码正在工作:

代码语言:javascript
复制
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++;
}

但我需要它在PHPQuery。

我试着用这样的方法:

代码语言:javascript
复制
include('phpQuery.php');

$pq = phpQuery::newDocument($html);

foreach ($pq->find('.project-preview') as $work){
        echo 'wow';
}

但不管用..。大小($pq->find(‘..project预览’))为0

我将非常感谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2011-12-18 00:49:51

我也有同样的问题!所以回答下一个问题的来访者。

简单的HTML存在一些内存泄漏问题。当您通过对象的选择器‘克隆’对象时,您必须非常小心。避开它!

据我所知,使用phpQuery,它只是一个清除所有内容的命令。

代码语言:javascript
复制
phpQuery::unloadDocuments();

我测试了phpQuery。看上去没有内存泄漏。内存使用率也很低。在90 kB的文件上只有4 kB。所以看起来它是实时解析的,内存中没有文档。至少这是我发现的,我可能错了。

还尝试创建20-30个文档,每次使用卸载,没有增加内存.好的!

这是我的回答:

代码语言:javascript
复制
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();

如果我们有更多的基本事物的例子,那就太好了!好的项目,糟糕的文件。或者至少我找不到解释text()函数的文档。

基准估计数:

在加载documents.

  • Simple HTML时,
  • phpQuery快3,5,看起来比选择:(

)快30%

票数 8
EN

Stack Overflow用户

发布于 2011-02-22 09:56:22

你的代码看起来很好。这个基本相同的代码对我来说运行得很好。

代码语言:javascript
复制
$q = phpQuery::newDocument('                                                    
<html>                                                                          
<body>                                                                          
<div class="findme">Lorem ipsum</div><div class="ignoreme">dolor sit amet</div> 
</body>                                                                         
</html>                                                                         
'                                                                               
);                                                                              

foreach($q->find('.findme')  as $tag) {                                         
    echo 'Found: '.$tag->tagName."(".$tag->getAttribute('class').")\n";         
}

结果:

发现: div(findme)

因此,问题是:

  • 你有什么错误吗?( error_reporting打开了吗?你的display_errors?)
  • What看起来像什么?

更新:

从下面的评论中可以看出,您正在尝试用newDocment()打开一个html文件。那是行不通的。您必须使用newDocumentFile() --或者自己读取文件内容,然后使用newDocument(),将所读内容传递给phpQuery。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5076074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档