我该怎么办才能获得cURL中的所有http链接

时间:2017-09-26 07:29:37

标签: php curl xpath

我使用CURL在php中创建了一个程序,我可以在其中获取任何站点的数据并可以在浏览器中显示它。该程序的另一部分是可以使用文件处理将数据保存在文件中,保存此数据后,我可以在保存文件的body标签中找到所有http链接。我的代码显示了浏览器中的所有网站,但我找不到所有的http链接

请帮我解决这个问题。

PHP代码:

<!DOCTYPE html>
<html>
    <head>
        <title>Display links using Curl</title>
    </head>
    <body>
        <?php
            $GetData = curl_init();
            $url = "http://www.ucertify.com/";
            curl_setopt($GetData, CURLOPT_URL, $url);
            curl_setopt($GetData, CURLOPT_RETURNTRANSFER, 1);
            $data = curl_exec($GetData);
            curl_close($GetData);
            $file=fopen("content.txt","w");
            fputs($file,$data);
            fclose($file);
            echo $data;
            function links() {
                $file_content = file_get_contents("http://www.ucertify.com/");
                $dom_obj = new DOMDocument();
                @$dom_obj->loadHTML($file_content);
                $xpath = new DOMXPath($dom_obj);
                $links_href = $xpath->evaluate("/html/body//a");
                for ($i = 0; $i<$links_href->length; $i++) {
                    $href = $links_href->item($i);
                    $url = $href->getAttribute("href");
                    if(strstr($url,"#")||strstr($url,"javascript:void(0)")||$url=="javascript:;"||$url=="javascript:"){}
                    else {
                        echo "<div>".$url."<div/>";
                    }
                }
            }
            echo links();
        ?>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

您可以像这样使用正则表达式

preg_match("/<body[^>]*>(.*?)<\/body>/is", $file_data, $body_content);
preg_match_all("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$body_content[1],$matches);
 foreach($matches[0] as $d) {
    echo $d."<br>";
    }