Php 为什么我的QueryPath脚本会导致“从空值创建默认对象”错误?
我正试图刮一个网站,以获得一些实践 以下是我到目前为止得到的信息,并给了我一个错误: 从空值创建默认对象 代码: 如果我取消对img或is_唯一数组行的注释,则会发生错误Php 为什么我的QueryPath脚本会导致“从空值创建默认对象”错误?,php,web-scraping,querypath,Php,Web Scraping,Querypath,我正试图刮一个网站,以获得一些实践 以下是我到目前为止得到的信息,并给了我一个错误: 从空值创建默认对象 代码: 如果我取消对img或is_唯一数组行的注释,则会发生错误 当这些行被注释掉时,其他一切都可以工作并提供预期的输出。问题发生的原因是QueryPath没有从选择器获取任何内容,试图从锚标记获取文本 我试图从每个表行的链接/锚点获取文本 然而,我循环中的第一行是一个表头,而不是一个带有任何链接的行 在循环中添加检查修复了我的问题: 我对QueryPath了解得不够,这是一个愚蠢的错误 同
当这些行被注释掉时,其他一切都可以工作并提供预期的输出。问题发生的原因是QueryPath没有从选择器获取任何内容,试图从锚标记获取文本 我试图从每个表行的链接/锚点获取文本 然而,我循环中的第一行是一个表头,而不是一个带有任何链接的行 在循环中添加检查修复了我的问题: 我对QueryPath了解得不够,这是一个愚蠢的错误
同样与github问题相关我突然也开始出现这个错误,输出更多信息,我发现它与QueryPath/DOMQuery.php第186行相关,其中显示$this->document->formatOutput=TRUE;也许这意味着$this->document没有被创建,而将TRUE赋值给formatOutput意味着它必须首先创建一个默认对象……但是为什么会这样,我还不知道。我发现这个讨论正是关于这个主题的,可能对你有用:虽然你是对的,Querypath实现此功能的方式非常令人担忧,这是您的错误。您甚至不能使用empty来检查查找是否为空。
// URL to scrape
$baseurl = 'http://some-site-with-a-table-of-items-that-contain-links.com';
// Get all rows from table
$rows = htmlqp($baseurl, '#items_table')->find('tr');
//initialize items array
$items = array();
// initilize counter
$i = 0;
// Iterate through rows of items
foreach($rows as $row) {
// get the url for the item in this row
$url = qp($row)->find('.link_txt a')->attr('href');
// select all the info in the item detail box
$item = htmlqp($url)->find('.item_detail_box');
// assign the item attributes to an array
$items[$i] = [
// the qp item $row is from the info on the main table of items
'img_thumb' => qp($row)->find('.reflection')->attr('src'),
'name' => qp($row)->find('.link_txt a')->text(),
'item_level' => qp($row)->find('.col_center')->text(),
'req_level' => qp($row)->find('.col_right')->text(),
'url' => $url,
// the qp item $item is from the actual item detail page
//'img' => qp($item)->find('.reflection')->attr('src'),
//'is_unique' => qp($item)->find('.unique')->text(),
];
$i++;
}
$data = print_r($items, true);
return '<pre>' . $data . '</pre>';
$url_ext = qp($row)->find('.ic_link_txt a')->attr('href');
if ( $url_ext != NULL && $url_ext != "" ) {