获取所有 itemprop 和 itemprop 深度
Get all itemprop and itemprop depths
我有这段代码,它或多或少地起作用了,问题是其中一些是空的,并且在数组中的位置错误,并且里面有 3 个其他 itemprops。
我不想硬编码,因为我要在多个网站上使用它。
function get_product_itemprop($url){
$url = file_get_contents($url);
$d = new DOMDocument();
$d->loadHTML($url);
$xpath = new DOMXPath($d);
$nodes = $xpath->query('//*[@itemprop]');
$new_data = array();
foreach ($nodes as $node) {
$new_data[$node->getAttribute("itemprop")] = trim(preg_replace('/\s+/', ' ',$node->nodeValue));
}
return $new_data;
}
函数的结果
array(8) {
["breadcrumb"]=>
string(38) "Home Atomizers & Coils Amor Mini coils"
["name"]=>
string(15) "Amor Mini coils"
["sku"]=>
string(5) "CO815"
["offers"]=>
string(8) "$ 13.99"
["price"]=>
string(0) ""
["priceCurrency"]=>
string(0) ""
["availability"]=>
string(0) ""
["url"]=>
string(0) ""
}
在 http://search.google.com/structured-data/testing-tool 我得到了所有的 itemprops 我想要一个与他们完成的类似的结构但是有一个数组:
您可以迭代 attributes
属性:
foreach ($nodes as $node) {
foreach ($node->attributes as $attr) {
$new_data[$attr->nodeName] []= $attr->nodeValue;
}
}
例子
$html = <<<'HTML'
<html>
<body>
<div itemprop="10" a="20" b="30"></div>
<div itemprop="40" a="50" z="60"></div>
</body>
</html>
HTML;
$d = new DOMDocument;
$d->loadHTML($html);
$xpath = new DOMXpath($d);
$nodes = $xpath->query('//*[@itemprop]');
$new_data = [];
foreach ($nodes as $node) {
foreach ($node->attributes as $attr) {
$new_data[$attr->nodeName] []= $attr->nodeValue;
}
}
var_dump($new_data);
输出
array(4) {
["itemprop"]=>
array(2) {
[0]=>
string(2) "10"
[1]=>
string(2) "40"
}
["a"]=>
array(2) {
[0]=>
string(2) "20"
[1]=>
string(2) "50"
}
["b"]=>
array(1) {
[0]=>
string(2) "30"
}
["z"]=>
array(1) {
[0]=>
string(2) "60"
}
}
示例代码获取文档中具有 itemprop
属性 的所有元素。如果要获取所有具有属性的元素,请使用 @*
,例如//*[@*]
.
我有这段代码,它或多或少地起作用了,问题是其中一些是空的,并且在数组中的位置错误,并且里面有 3 个其他 itemprops。
我不想硬编码,因为我要在多个网站上使用它。
function get_product_itemprop($url){
$url = file_get_contents($url);
$d = new DOMDocument();
$d->loadHTML($url);
$xpath = new DOMXPath($d);
$nodes = $xpath->query('//*[@itemprop]');
$new_data = array();
foreach ($nodes as $node) {
$new_data[$node->getAttribute("itemprop")] = trim(preg_replace('/\s+/', ' ',$node->nodeValue));
}
return $new_data;
}
函数的结果
array(8) {
["breadcrumb"]=>
string(38) "Home Atomizers & Coils Amor Mini coils"
["name"]=>
string(15) "Amor Mini coils"
["sku"]=>
string(5) "CO815"
["offers"]=>
string(8) "$ 13.99"
["price"]=>
string(0) ""
["priceCurrency"]=>
string(0) ""
["availability"]=>
string(0) ""
["url"]=>
string(0) ""
}
在 http://search.google.com/structured-data/testing-tool 我得到了所有的 itemprops 我想要一个与他们完成的类似的结构但是有一个数组:
您可以迭代 attributes
属性:
foreach ($nodes as $node) {
foreach ($node->attributes as $attr) {
$new_data[$attr->nodeName] []= $attr->nodeValue;
}
}
例子
$html = <<<'HTML'
<html>
<body>
<div itemprop="10" a="20" b="30"></div>
<div itemprop="40" a="50" z="60"></div>
</body>
</html>
HTML;
$d = new DOMDocument;
$d->loadHTML($html);
$xpath = new DOMXpath($d);
$nodes = $xpath->query('//*[@itemprop]');
$new_data = [];
foreach ($nodes as $node) {
foreach ($node->attributes as $attr) {
$new_data[$attr->nodeName] []= $attr->nodeValue;
}
}
var_dump($new_data);
输出
array(4) {
["itemprop"]=>
array(2) {
[0]=>
string(2) "10"
[1]=>
string(2) "40"
}
["a"]=>
array(2) {
[0]=>
string(2) "20"
[1]=>
string(2) "50"
}
["b"]=>
array(1) {
[0]=>
string(2) "30"
}
["z"]=>
array(1) {
[0]=>
string(2) "60"
}
}
示例代码获取文档中具有 itemprop
属性 的所有元素。如果要获取所有具有属性的元素,请使用 @*
,例如//*[@*]
.