我正试图通过QueryPath抓取一个网站进行练习。
这是我到目前为止所做的,并给了我一个错误:
从空值创建默认对象
代码:
// 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>';
如果我取消注释img
或is_unique
数组行,则会发生错误。
其他所有内容都有效,并在这些行被注释掉时给出预期的输出。
答案 0 :(得分:0)
问题出现了,因为QueryPath从选择器中获取的内容并未尝试从锚标记中获取文本。
我试图从每个表格行的链接/锚点中获取文本。
但是,我的循环中的第一行是表头,而不是带有任何链接的行。
在循环中添加一个检查修复了我的问题:
$url_ext = qp($row)->find('.ic_link_txt a')->attr('href');
if ( $url_ext != NULL && $url_ext != "" ) {
对于我对QueryPath不够了解,这是一个愚蠢的错误。
(也与github问题https://github.com/technosophos/querypath/issues/130相关)