php curl, извлечение метки ссылки - PullRequest
2 голосов
/ 02 июля 2010

У меня есть код для извлечения ссылок, но мне также нужен ярлык ссылки. Мне нужно, чтобы ссылки хранились в массиве, а метка ссылки хранилась в другом массиве.

например, если на сайте bbc.com есть код <a href="bbc.com/sports.html>sports</a>, мне нужно $linklabel[0]=sports и $link[0]=bbc.com/sports.html.

Код указан ниже, но ошибка возникает как Fatal error: Call to undefined method DOMXPath::find() in C:\wamp\www\test\d.php on line 14

<?php
    $url='http://edition.cnn.com/?fbid=4OofUbASN5k';

    $var = fread_url($url);// function calling to get the page from curl
    $search = array('@<script[^>]*?>.*?</script>@si');  // Strip out javascript
    $var = preg_replace($search, "\n", html_entity_decode($var)); // Strip out javascript

    $linklabel = array();
    $link = array();
    $dom = new DOMDocument($var);
    @$dom->loadHTML($var);
    $xpath = new DOMXPath($dom);// Grab the DOM nodes 

foreach($xpath->find('a') as $element)
   {
     array_push($linklabel, $element->innerText);
     print $linklabel;
     array_push($link, $element->href);
     print $link.'<br>';
    }


    function fread_url($url)
    {
        if(function_exists("curl_init")){
            $ch = curl_init();
            $user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; ".
                          "Windows NT 5.0)";
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
            curl_setopt( $ch, CURLOPT_HTTPGET, 1 );
            curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
            curl_setopt( $ch, CURLOPT_FOLLOWLOCATION , 1 );
            curl_setopt( $ch, CURLOPT_FOLLOWLOCATION , 1 );
            curl_setopt( $ch, CURLOPT_URL, $url );

            curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
            $html = curl_exec($ch);
            //print $html;//printing the web page.
            curl_close($ch);
        }
        else{
            $hfile = fopen($url,"r");
            if($hfile){
                while(!feof($hfile)){
                    $html.=fgets($hfile,1024);
                }
            }
        }
        return $html;
    }

?> 

Ответы [ 2 ]

2 голосов
/ 02 июля 2010

Это легко, используя Simple HTML DOM.

$html = file_get_html('http://www.google.com/');

$linklabel = array();
$link = array();

foreach($html->find('a') as $element)
   {
     array_push($linklabel, $element->innerText);
     array_push($link, $element->href);
    }
0 голосов
/ 02 июля 2010

Вы пришли в нужное место. Удалите свою электронную почту, так как это общедоступный ресурс сообщества, а не ваша личная машина Q / A.

Итак, вы должны использовать simple_html_dom для анализа ссылок. Тогда это становится так просто, как

$dom = file_get_html('http://www.google.com/');

// get the label of all links. see the docs for searching options
foreach ($dom->find('a') as $links)
{
    $link->innerText;
    $link->href;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...