2

我正在尝试使用 PHPQuery ( https://code.google.com/p/phpquery/ ) 从我的网站上抓取数据。我想从页面中提取元信息。

这是我迄今为止尝试过的:

$html = phpQuery::newDocumentHTML($file, $charset = 'utf-8');

$MetaItems = [];
foreach (pq('meta') as $keys) {
    $names = trim(strtolower(pq($keys)->attr('name')));
    if ($names !== null && $names !== '') {
        array_push($MetaItems, $names);
    }
}
            
for ($i=0; $i < count($MetaItems); $i++) {
    $test = 'meta[name="' . $MetaItems[$i] . '"]';
    echo pq($test)->html();
}

上图:在$MetaItems我得到所有元属性name。这个数组被正确填充。

但是选择和提取文本不起作用。我如何让上面的代码工作?谢谢。

4

2 回答 2

4

你想要一个带有 name => content 的 assoc 数组,对吗?尝试这个:

$metaItems = array();
foreach(pq('meta') as $meta) {
  $key = pq($meta)->attr('name');
  $value = pq($meta)->attr('content');
  $metaItems[$key] = $value;
}

var_dump($metaItems);
于 2012-12-21T02:16:57.557 回答
0

假设您提取的值与您尝试获取的名称属性的值完全相同...我很确定该name属性的值区分大小写。您需要删除 strtolower 和修剪。两者都可能导致问题。我会用这个替换第一部分:

$html = phpQuery::newDocumentHTML($file, $charset = 'utf-8');

$MetaItems = [];
foreach (pq('meta') as $keys) {
    $names = pq($keys)->attr('name');
    if (!empty($names) && trim($names)) {
        array_push($MetaItems, $names);
    }
}

希望有帮助

于 2012-12-21T01:11:30.543 回答