owner888 / phpspider

《我用爬虫一天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》所使用的程序
3.49k stars 1.18k forks source link

required用法有问题 #112

Open jourdon opened 6 years ago

jourdon commented 6 years ago

定义该field的值是否必须, 默认false 赋值为true的话, 如果该field没有抽取到内容, 该field对应的整条数据都将被丢弃

我在fields中定义了required=true,获取不到内容时并不会丢弃这条数据 日志里可以看到,值给的是false,数据库里会有空数据入库,

2018-06-21 10:01:23 [debug] Find content page: https://www.qiushibaike.com/article/116426475
2018-06-21 10:01:23 [info] Result[9]: {"author":false,"content":false}
2018-06-21 10:01:23 [debug] Success process page https://www.qiushibaike.com/article/120583413 in 0.143 s

暂时解决方法是

$spider->on_extract_page = function($page, $data)
{
    $data['author']  =   trim($data['author']);
    $data['content']  =   trim($data['content']);
    if( !$data['author'] || !$data['content']) {
        return false;
    }
    return $data;
};
jourdon commented 6 years ago

101 这个pr解决了这个问题,感谢,应该合并一下的啊。

owner888 commented 6 years ago

@jourdon 谢谢兄弟提醒,已经修复,只要修改了 selecter 类的返回值,找不到数据返回false,但是 isset(false)为true,所以就有问题了,应该返回null,为是么要用 isset($values)判断而不是 !$values,因为0会出错,0其实也是有值的