cURL & XPath для отображения текста привязки href? - PullRequest
0 голосов
/ 11 августа 2010

Следующий код PHP использует cURL, XPath и отображает все ссылки на определенной странице ($ target_url).

** То, что я пытаюсь сделать, это выяснить, как отображать только текст привязки (связанные слова в href) на данной странице, когда я предоставляю значение веб-сайта.

Например ... Я хочу выполнить поиск "randomwebsite.com", чтобы увидеть, есть ли ссылка с моим target_url (например, ebay.com), и отобразить только текст привязки "аукциона"

http://www.ebay.com'>auction веб-сайт


<?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 ]

1 голос
/ 11 августа 2010

Вы получите текст с $href->nodeValue внутри вашего примера цикла.На самом деле это не учитывает то, что вы, возможно, захотите сделать, если это тег изображения или что-то подобное, но я думаю, что именно об этом вы и просили.

0 голосов
/ 11 августа 2010

не уверен, понял ли я то, о чем вы просите ... но, может быть, это то, что вы хотите реализовать?

$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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...