cURL& XPath显示href锚文本?

时间:2010-08-10 23:20:49

标签: php xpath curl

以下PHP代码使用cURL,XPath并显示特定页面上的所有链接($ target_url)。

**我正在尝试做的是弄清楚当我提供网站价值时如何仅在给定页面上显示锚文本(href中的链接词)。

例如......我想搜索“randomwebsite.com”以查看是否有与我的target_url(例如ebay.com)的链接,并只显示“拍卖网站”的锚文本

http://www.ebay.com'>拍卖网站


<?php


$target_url = "http://www.ebay.com";
$userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';

// make the cURL request to $target_url
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html= curl_exec($ch);
if (!$html) {
    echo "<br />cURL error number:" .curl_errno($ch);
    echo "<br />cURL error:" . curl_error($ch);
    exit;
}

// parse the html into a DOMDocument
$dom = new DOMDocument();
@$dom->loadHTML($html);

// grab all the on the page
$xpath = new DOMXPath($dom);
$hrefs = $xpath->query('/html/body//a');

for ($i = 0; $i < $hrefs->length; $i++) {
    $href = $hrefs->item($i);
    $url = $href->getAttribute('href');
    echo "<br />Link: $url";
}

?>

2 个答案:

答案 0 :(得分:1)

您将在示例循环中获得带有$href->nodeValue的文本。如果这是一个图片标签,那么这并不能说明你想要做什么,但我认为这是你特别要求的。

答案 1 :(得分:0)

不确定我是否明白了你所要求的......但也许这就是你要实现的目标?

$url_matches = array('www.ebay.com' => 'Auction Site', 
                     'www.google.com' =>'Search Engine'
               );

for ($i = 0; $i < $hrefs->length; $i++) {
    $href = $hrefs->item($i);
    $url = $href->getAttribute('href');
    if (in_array($url, $url_matches)) {
       $url = $url_matches[$url]; 
    }    
    echo "<br />Link: $url";
}