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

复制
相关文章
如何用python读取和写入TIFF文件
f.seek(offset)#TODO: only header size for tiff !!
py3study
2020/01/08
3.4K0
如何在 Python 中读取 .data 文件?
在本文中,我们将学习什么是 .data 文件以及如何在 python 中读取 .data 文件。
很酷的站长
2023/02/22
6.2K0
如何在 Python 中读取 .data 文件?
如何在Java中逐行读取文件
本文翻译自How to read a file line by line in Java
ccf19881030
2020/11/24
10.8K0
matlab循环读取txt文件
一般情况下,假如我要读取data目录下一个名为saif.txt的文件,只需要利用下面的语句:
全栈程序员站长
2022/11/08
2.1K0
matlab读取mnist数据集(c语言从文件中读取数据)
mnist database(手写字符识别) 的数据集下载地:http://yann.lecun.com/exdb/mnist/。
全栈程序员站长
2022/08/01
5.2K0
matlab读取mnist数据集(c语言从文件中读取数据)
如何在python中惰性地读取文件?
惰性地读取,就是在读文件的时候,不是直接将整个文件读到内存之中,而是一行一行的读取。这对于读取如网页日志这样的贼大的文件来说,可以减少打开文件的响应时间以及所占用的内存。
灯珑LoGin
2022/10/31
2K0
Matlab中读取txt文件的几种方法[通俗易懂]
2、importdata——只读取数据,自动省略数据格式前后的字符,超大文件不适合;
全栈程序员站长
2022/10/03
20.2K0
如何更愉快地使用em
CSS提供了很多种方式去定义一个值。大家最熟悉的可能也是最容易使用的就是像素(pixel),这被称做“绝对单位”。也就是说,5px在不同的场景下是一样的值。而其他的单位,如em和rem,不是绝对的而是相对的。相对单位的值会根据外部影响因素的变化而变化。例如,2em的值取决于你在哪个元素使用它(有时甚至是哪个属性)。很自然,相对单位使用起来会比较困难。
六小登登
2018/09/18
9250
matlab 行 读取文件 跳过_Matlab读取TXT文件并跳过中间几行的问题!!
#!MLF!#”*/group1.rec”011300000sil-3797.347412SENT-START1130000011600000dh-156.719879the1160000011900000ax-208.4651641190000011900000sp-1.2039731190000012500000ih-482.5331…
全栈程序员站长
2022/10/04
2K0
matlab里读取txt文件里指定列怎么办_matlab读取音频文件
想读取一个txt文本中的很多数据。数据之前有几行是中文,然后才是数据,如何用MATLAB读取txt文件中标识符所对应的列啊,多谢指教了!文件大概是这样的:
全栈程序员站长
2022/10/04
1.2K0
TIFF文件切割_tif文件分割
TIFF文件由于可以存储多种形式的数据类型,也可以存储大量的数据,故其体积比较大,如果我们想截取其中的一部分图片数据,如下图:
全栈程序员站长
2022/11/17
1.6K0
TIFF文件切割_tif文件分割
matlab读取txt文件数据_matlab怎么输入数据
大家好,又见面了,我是你们的朋友全栈君。 文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入输出函数,专门用于文件操作。 1、文件的打开与关闭 1)打开文件 在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为: fid=fopen(文件名,‘打开方式’) 说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:  ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。  ‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。  ‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。  ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。  ‘a’:在打开的文件末端添加数据。文件不存在则创建。  ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。 另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。 2)关闭文件 文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为: sta=fclose(fid) 说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。 2、二进制文件的读写操作 1)写二进制文件 fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为: COUNT=fwrite(fid,A,precision) 说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。 例6.8 将一个二进制矩阵存入磁盘文件中。 >> a=[1 2 3 4 5 6 7 8 9]; >> fid=fopen(‘d:\test.bin’,’wb’) %以二进制数据写入方式打开文件 fid = 3 %其值大于0,表示打开成功 >> fwrite(fid,a,’double’) ans = 9 %表示写入了9个数据 >> fclose(fid) ans = 0 %表示关闭成功 2)读二进制文件 fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为: [A,COUNT]=fread(fid,size,precision) 说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。 3、文本文件的读写操作 1)读文本文件 fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。其调用格式为: [A,COUNT]=fscanf(fid,format,size) 说明:其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。 2)写文本文件 fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为: fprintf(fid,format,A) 说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。 例6.9 创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。 >> a=’string’; >> fid=fopen(‘d:\char1.txt’,’w’); >> fprintf(fid,’%s’,a); >> fclose(fid); >> fid1=fopen(‘d:\char1.txt’,’rt’); >> fid1=fopen(‘d:\c
全栈程序员站长
2022/10/04
1.6K0
matlab 定位_matlab读取mp3音频文件
Ⅱ、毕业设计(论文)工作内容(从综合运用知识、研究方案的设计、研究方法和手段的运用、应用文献资料、数据分析处理、图纸质量、技术或观点创新等方面详细说明):
全栈程序员站长
2022/09/28
5420
Matlab读取和写入音频文件
使用 audiowrite 函数将数据写入当前文件夹中名为 handel.wav 的 WAVE 文件。
用户9925864
2022/07/27
3.7K0
Matlab读取和写入音频文件
关于MATLAB读取txt文件的方法[通俗易懂]
一、如何读取一个文档下,多个txt文件? 一般读取的文件,命名都具有一定的规律,除去相同部分,剩下的变化按照时间、序号、某一特定的标志符等进行排列。 下面我们举个例子来操作。
全栈程序员站长
2022/10/04
1.8K0
matlab h5文件_matlab读取二进制文件
1、把两个h5文件合并为一个。 h5Splicing(h5NameSou, ‘/’, h5NameDst, cellNum, 1);
全栈程序员站长
2022/10/29
4800
使用python读取matlab数据文件.mat
传送门 http://blog.stackoverflow.club/hdf5-usage/
羽翰尘
2019/11/19
2.5K0
matlab读取txt文件为数组「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/04
1.2K0
点击加载更多

相似问题

用MATLAB读取和处理多个.TIFF文件

13

如何在Matlab中读取tiff格式的大图像?

10

Matlab中的大tiff读取和视图

13

读取TIFF文件

12

如何在c中读取TIFF文件头?

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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