Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PHP解析器错误

PHP解析器错误
EN

Stack Overflow用户
提问于 2014-07-25 10:39:00
回答 1查看 797关注 0票数 0

我有解析网页的代码。包含用于解析每个页面的foreach。第一个周期正确执行,另一个周期在解析器中失败。致命错误:在C:\ wamp \ www \解析器\ dom.php第1129行中调用非对象上的成员函数find ()。

解析器是PHP简单的HTML http://sourceforge.net/projects/simplehtmldom/

代码语言:javascript
运行
AI代码解释
复制
<?php
header('Content-Type: text/html; charset=utf-8');
include ('dom.php');
$mysql = mysqli_connect("localhost", "root", "", "db");


$import['id'][]=3;
$import['url'][]='http://sitea.com';
$import['id'][]=2;
$import['url'][]='http://siteb.com';
$import['id'][]=1;
$import['url'][]='http://sitec.com';

for($i=0; $i<count($import['id']); $i++){
    $coupons=array();
    $id=0;
    $parser = new simple_html_dom();
    $parser->load_file($import['url'][$i]);

    foreach($parser->find('section[class=couponList]', 0)->find('article[class=coupon]') as $coupon){
        $coupons[$id]['name']=trim($coupon->find('div[class=name]',0)->plaintext);
        $date=explode(' ', trim($coupon->find('p[class=dateFormat]',0)->plaintext));
        $coupons[$id]['date-from']=strtotime(trim($date[45]));
        $coupons[$id]['date-to']=strtotime(trim($date[130]));
        $coupons[$id]['description']=trim($coupon->find('div[class=description]',0)->plaintext);
        $coupons[$id]['sale']=@trim($coupon->find('div[class=couponImageContainer] div p',0)->plaintext);
        $coupons[$id]['id']=$coupon->attr['data-id'];

        //Code
        if(trim($coupon->find('div[class=couponColorType]',0)->plaintext)=='Kód'){
            $parser2 = new simple_html_dom();
            $parser2->load_file($import['url'][$i].'?cpn_id='.$coupon->attr['data-id']);
            $coupons[$id]['code']=strip_tags($parser2->find('span[class=popupCode]',0));
            $coupons[$id]['type']="kod";
        }else{
            $coupons[$id]['type']="nabidka";
            $page=file_get_contents('http://slevovekody.com/r/'.$coupon->attr['data-id']);
            $data=explode("window.location = '", $page);
            $data=explode("';", @$data[1]);

            $u=explode('http://', $data[0]);
            if(count($u)>2){
                $u='http://'.$u['2'];
            }else{
                $u=$data[0];
            }
            $u=explode('?', $u);
            $coupons[$id]['url']=$u[0];
        }
        $id++;
    }
    foreach($coupons as $c){            
        if(mysqli_num_rows(mysqli_query($mysql, "SELECT * FROM coupon WHERE id_import='".$c['id']."'"))==0){
            mysqli_query($mysql, "INSERT INTO `coupon` (`eshop`, `id_import`, `name`, `alias`, `description`, `type`, `from`, `to`, `code`, `url`, `sale`) VALUES ('".$import['id'][$i]."', '".$c['id']."', '".$c['name']."', '".makeAlias($c['name'])."', '".$c['description']."', '".strtolower($c['type'])."', '".$c['date-from']."', '".$c['date-to']."', '".@$c['code']."', '".@$c['url']."', '".$c['sale']."')");
        }
    }
    var_dump($coupons);
    unset($coupons);
}

?>

错误

代码语言:javascript
运行
AI代码解释
复制
Fatal error: Call to a member function find() on a non-object in C:\wamp\www\parser\dom.php on line 1129
Call Stack
#   Time    Memory  Function    Location
1   0.0010  291880  {main}( )   ..\index.php:0
2   5.5803  21923208    simple_html_dom->find( )    ..\index.php:20

错误在线:

代码语言:javascript
运行
AI代码解释
复制
foreach($parser->find('section[class=couponList]', 0)->find('article[class=coupon]') as $coupon){
EN

回答 1

Stack Overflow用户

发布于 2014-07-25 10:49:59

如果一个find()调用没有找到任何东西(例如,没有匹配),那么它将返回NULL。因此,您可以以自己的方式调用NOT chain find(),因为任何失败的查找都将返回null并导致“非对象调用”。

e.g

代码语言:javascript
运行
AI代码解释
复制
$x = $dom->find('element_that_does_not_exist');  // $x becomes null
$x->find('body');

相当于做null->find()

您必须捕获中间结果,并查看是否有匹配。

代码语言:javascript
运行
AI代码解释
复制
$x = $dom->find('element_that_does_not_exist');
if (!is_null($x)) {
   $y = $x->find('other stuff');
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24962416

复制
相关文章
SAS学习笔记之《SAS编程与数据挖掘商业案例》(2)数据获取与数据集操作
版权声明:本文为王小雷原创文章,未经博主允许不得转载 https://blog.csdn.net/dream_an/article/details/50416819
王小雷
2019/05/27
7080
SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集
本文介绍了SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集,以及使用SAS/ACCESS接口引擎进行数据库访问和SQL查询的方法。
王小雷
2018/01/02
2.1K0
SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理
王小雷
2018/01/02
1.7K0
CAN总线简介:如何以编程方式控制汽车
最近,我正与Voyage公司的朋友合作研究,以实现福特Fusion空调系统(A/C)的编程控制。目前,Voyage公司正努力打造自动驾驶的终极目标:能够以低廉的价格成本和广泛的投放范围,把世界任何地方有用车需求的人们安全自动地送达目的地。对Voyage来说,在真正实现不需司机的无人驾驶之后,必须给予后座乘客对车辆关键功能的访问控制权。 Voyage Auto:硅谷自动自动驾驶出租车初创公司,由专注机器学习、人工智能等方面的在线培训机构Udacity于2017年4月成立,在无人驾驶领域,Voyage将与谷
FB客服
2018/02/28
3.6K0
CAN总线简介:如何以编程方式控制汽车
SAS-编程中的小技巧
今天分享的是SAS软件使用过程的中的几个小技巧,掌握了一些小技巧,编程的效率会提高的更快,还能减少敲代码出错率,好处很多,小编就不一一赘述了。 ----Setup~ 1 快捷键(功能键的使用) 今小编这里说的快捷键,并不是通俗意义上的那种CTRl+A、CTRL+C的这种快捷键,而是SAS编程里面的宏功能键(我称“快捷键”)。改键的使用,可实现设置代码块,以后只敲击代码块的缩写,自动就弹出代码。 01 看效果 1.以输入CSV为例 2.输入回车
企鹅号小编
2018/02/05
1.7K0
SAS-编程中的小技巧
SAS-编程中的小技巧
今小编这里说的快捷键,并不是通俗意义上的那种CTRl+A、CTRL+C的这种快捷键,而是SAS编程里面的宏功能键(我称“快捷键”)。改键的使用,可实现设置代码块,以后只敲击代码块的缩写,自动就弹出代码。
Setup
2019/10/21
1.5K0
SAS进阶《深入解析SAS》之对多数据集的处理
本文介绍了SAS中数据集纵向串接和横向合并的方法,包括使用DATA步、SET语句、APPEND过程、MERGE语句等方法。同时,还介绍了如何通过数据集选项IN=操作观测和更新UPDATA语句对数据集进行更改。最后,介绍了数据集的更改和更新语句的注意事项和具体操作方法。
王小雷
2018/01/02
1.6K0
java中获得文件大小代码
  根据指定文件创建FileInputStream,调用available方法返回文件大小,容量为byte                 File file = new File("d:\hello.gif");                 FileInputStream fis = null;                 try{                     fis = new FileInputStream(file);                       Syst
闵开慧
2018/03/30
1.1K0
SAS-编程中的小技巧(九)
新年的第一篇推文,一直打算写一点什么,小编辗转反侧、思来想去,发现编程中的小技巧已经写了八篇,如果在写一篇,那便是第九篇,与2019年的9有遥相呼应之势!好像做为新年的第一篇是一件很吉祥的事情。于是,在着实没什么内容想写的情况之下,今天小编打算分享一点编程中的小技巧。
Setup
2019/10/20
8980
SAS-编程中的小技巧(二)
嗯,这是一篇SAS编程的中的小技巧,不知是否记得小编之前写过一篇SAS-编程中的小技巧(可点击跳转),嗯,这又是一些编程中相关的小技巧。接下来小编将一一介绍这几个小技巧。
Setup
2019/10/21
1.1K0
SAS-编程中的小技巧(二)
SAS-编程中的小技巧(六)
前段时间有人问小编,批量执行ods输出文件时,总是弹出并打开输出的文件,有没有办法关闭呢?你是否也遇到这样的问题,而找遍ods相关的Option仍无法解决呢?解决办法其实还是很简单的。下面来看看怎么解决。
Setup
2019/10/20
1.7K0
SAS-编程中的小技巧(十一)
“一鼓作气再而衰三而竭”,趁着还没有衰,于是小编就又开始写推文了。许久未写编程中的小技巧了,今天小编打算分享一下编程中的小技巧。
Setup
2019/10/19
9440
SAS-编程中的小技巧(十一)
SAS-编程中的小技巧(三)
这又是一篇SAS编程中的小技巧,这次要说的是SAS中数据字典与Macro结合起来的使用技巧,以及数据集删除、保存等技巧....
Setup
2019/10/20
2.4K0
SAS-编程中的小技巧(八)
很久没写公众号了...也积累很多想要分享的小技巧,奈何一直苦于工作繁忙,诸事繁多无暇分身...在即将要忘掉所有想分享的小技巧的前一秒想起了公众号还没写呢...最近一直在写报告,用SAS输出RTF,所有啊,今天打算分享的也是RTF输出相关的小技巧...
Setup
2019/10/20
1.6K0
SAS-编程中的小技巧(七)
虽然难以启齿,但是花费巨额的代价买的教训,还是想分享给大家。“驾驶有风险,开车需谨慎”
Setup
2019/10/20
9260
SAS-编程中的小技巧(四)
SAS软件初始配置,其实是设置了自动保存代码的功能,好像是每10分钟保存一次,这个时间小编觉得有点长,毕竟10分钟能敲下好多代码...所以啊,就看看如何设置把这个时间给调小一下...
Setup
2019/10/21
1.4K0
SAS-编程中的小技巧(四)
SAS-编程中的小技巧(十)
果然是不动脑筋久了就会变蠢,最近小编写程序感觉变蠢了许多。思来想去究其原因发现是公众号许久未更了。为了不让愚蠢延续下去,今天小编打算分享一些SAS编程相关的小技巧。
Setup
2019/10/20
1K0
【从零开始学SAS】1、创建时间序列SAS数据集
注:intnx函数的三个参数,第一个参数是指定等时间间隔,可以是day week monthquarter year等。第二个参数是指定参照时间。第三个参数是_n_k,用来调整开始观测指针,k为正整数时指针由参照时间向未来拨k期;k取负整数时反之。
统计学家
2019/04/10
2.2K0
【从零开始学SAS】1、创建时间序列SAS数据集
SAS-编程中的小技巧(十二)
懒惰的小编好像开启了一月一更的模式了,许久未写编程中的小技巧了,于是今天小编打算分享几个编程中的小技巧。
Setup
2019/10/31
1.9K0
网络编程中的大小端
在计算机领域,大小端(Endianness)是指字节序的排列顺序。简单来说,就是存储器中多字节数据的字节序列,从高到低或从低到高的顺序不同。那么,何谓大小端呢?
李述铜
2023/05/01
8240

相似问题

以适当的方式显示时间

25

UIDatePicker没有显示适当的时间

26

消息对话框在错误的时间显示

30

在上载时间显示适当的消息

30

为什么我的文本框在jquery中不返回任何适当的值?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档