使用PHP刮掉完整的图像src

时间:2009-07-21 23:00:01

标签: php path screen-scraping src

我正在尝试用php抓取img src,我可以很好地获得src,但是如果src不包含完整路径那么我就无法重用它。有没有办法使用PHP获取图像的完整路径(如果您使用右键菜单,浏览器可以获取它)。

即。如何在以下两个示例之一中获得包含域的完整路径?

src="../foo/logo.png"
src="/images/logo.png"

谢谢,

阿伦

2 个答案:

答案 0 :(得分:3)

你不需要正则表达式......只需要一些耐心。我真的不想为你编写代码,只是检查src是否以http://开头,如果没有,你有3种不同的情况。

  1. 如果以/开头,则前置http://domain.com
  2. 如果以..开头,您必须split完整网址和hack off pieces,直到src以/
  3. 开头
  4. 否则(以字母开头),取完整域名,strip it down to the last slash然后附加src网址。
  5. 或者......偷懒并偷走这个剧本

    $url = "http://www.goat.com/money/dave.html";
    $rel = "../images/cheese.jpg";
    
    $com = InternetCombineURL($url,$rel);
    
    //  Returns http://www.goat.com/images/cheese.jpg
    
    function InternetCombineUrl($absolute, $relative) {
        $p = parse_url($relative);
        if($p["scheme"])return $relative;
    
        extract(parse_url($absolute));
    
        $path = dirname($path); 
    
        if($relative{0} == '/') {
            $cparts = array_filter(explode("/", $relative));
        }
        else {
            $aparts = array_filter(explode("/", $path));
            $rparts = array_filter(explode("/", $relative));
            $cparts = array_merge($aparts, $rparts);
            foreach($cparts as $i => $part) {
                if($part == '.') {
                    $cparts[$i] = null;
                }
                if($part == '..') {
                    $cparts[$i - 1] = null;
                    $cparts[$i] = null;
                }
            }
            $cparts = array_filter($cparts);
        }
        $path = implode("/", $cparts);
        $url = "";
        if($scheme) {
            $url = "$scheme://";
        }
        if($user) {
            $url .= "$user";
            if($pass) {
                $url .= ":$pass";
            }
            $url .= "@";
        }
        if($host) {
            $url .= "$host/";
        }
        $url .= $path;
        return $url;
    }
    

    来自http://www.web-max.ca/PHP/misc_24.php

答案 1 :(得分:2)

除非你有开始的网站网址(在这种情况下,你可以将它添加到src属性的值),看起来你剩下的就是一个字符串。

我假设您当然无法访问任何其他信息。如果您正在解析HTML,我假设您必须能够访问至少HTML页面的绝对URL,但可能不会。