首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 2爬虫中的异常处理

Symfony 2爬虫中的异常处理
EN

Stack Overflow用户
提问于 2014-12-27 18:30:56
回答 1查看 1K关注 0票数 1

我有这个密码

代码语言:javascript
复制
   try{

    $totalpages=$crawler->filter('.button-see-more');

        $totalpages=$totalpages->extract(array('data-total-pages'))[0];

        if($totalpages>0)
            for($i=1;$i<=$totalpages;$i++)
            {
                $client->request('GET', 'http://www.daraz.pk/catalog/getproducts/?pathInfo=phones%2Fqmobile&page='.$i.'&YII_CSRF_TOKEN='.$CSRF, array(), array(), array(
                    'HTTP_X-Requested-With' => 'XMLHttpRequest',
                ));
                echo $i.'th page: '.$client->getResponse()->getContent()."\r\n";
            }


}
catch (InvalidArgumentException $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

根据文档页

代码语言:javascript
复制
 $totalpages=$crawler->filter('.button-see-more');

当筛选器不匹配任何内容时,它应该抛出一个没有抛出的InvalidArgumentException,而是在我得到的控制台中抛出

PHP注意:未定义的偏移量:0

我怎么能抓到这个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-27 18:37:20

文档中的任何地方都没有说明,如果InvalidArgumentException与任何内容不匹配,它就会抛出它:

https://github.com/symfony/dom-crawler/blob/2.6/Crawler.php#L675

如果您还没有安装Symfony的RuntimeException,那么唯一可能引发的异常是一个CssSelector。因此,在您的情况下,将永远不会抛出异常。

相反,您需要的是count()方法(它位于SplObjectStorage基类上)。因此,您可以通过以下方式测试是否返回了任何内容:

代码语言:javascript
复制
if ($totalpages->count() > 0)

你也可以

代码语言:javascript
复制
if ($totalpages->count())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27670262

复制
相关文章

相似问题

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