我是如何得到" rel"来自html视图源的属性使用php?

时间:2017-04-11 05:29:02

标签: php html curl html-parsing

我想要与搜索域关联的锚标记的 rel 属性的值。

我必须更改域名" blog.zeit.de/berlinjournal"而不是" http://blog.zeit.de/berlinjournal/"。使用此域名并找到 rel Val

@Sam Onela,代码不适用于此域名。请帮我解决这个错误。

我的代码是:

$domain = 'blog.zeit.de/berlinjournal';
$handle = fopen($domain, 'r');
$content = stream_get_contents($handle);
fclose($handle);
if ((strpos($content, $domain) !== false)) {
        echo 'true'; // true if $domain found in view source content
} 

在吹像中获得清晰的想法

enter image description here

1 个答案:

答案 0 :(得分:1)

创建DOMDocument的实例,调用loadHTML()方法,然后使用simplexml_import_dom()获取SimpleXMLElement的实例,xpath()方法可用于查询该锚标记。

加载html时,您可能还会注意到屏幕上显示警告。要将其设置为使用内部错误处理程序,请使用libxml_use_internal_errors(true); - 感谢@dewsworld this answer

libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTML($content);
$xml = simplexml_import_dom($doc);
$results = $xml->xpath("//a[@href='$domain']");
if (sizeof($results)) {
    echo 'rel: '.$results[0]['rel'].'<br>';
}

this phpfiddle中看到它。

更新

由于原始网址的HTML已更改,现在要求查找其他锚标记的 rel 属性,可以使用contains() xpath函数完成。< / p>

$searchDomain = 'rballutschinski.wordpress.com/';
if ((strpos($content, $searchDomain) !== false)) {
    $doc = new DOMDocument();
    $doc->loadHTML($content);
    $xml = simplexml_import_dom($doc);
    $results = $xml->xpath("//a[contains(@href,'$searchDomain')]");
    if (sizeof($results)) {
        $rel = $results[0]['rel'];
    }

参见this phpfiddle中的演示。