我正在尝试使用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
。此数组已正确填充。
但是选择和提取文本不起作用。我如何让上面的代码工作? 感谢。
答案 0 :(得分:4)
你想要一个名为=&gt;的关联数组;内容,对吗?试试这个:
$metaItems = array();
foreach(pq('meta') as $meta) {
$key = pq($meta)->attr('name');
$value = pq($meta)->attr('content');
$metaItems[$key] = $value;
}
var_dump($metaItems);
答案 1 :(得分: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);
}
}
希望有所帮助