【问题标题】:Scrape FULL image src with PHP使用 PHP 抓取完整的图像 src
【发布时间】:2010-11-12 19:53:02
【问题描述】:

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

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

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

谢谢,

艾伦

【问题讨论】:

    标签: php path screen-scraping src


    【解决方案1】:

    除非你有你开始使用的站点 URL(在这种情况下你可以将它添加到 src 属性的值),你似乎只剩下一个字符串。

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

    【讨论】:

    • 是的,有人在表单中输入了一个 url,该表单被添加到该脚本中,该脚本将内容放入从另一个页面调用的数据库中,因此我可以在域前添加域,但我想知道如果有更优雅的解决方案。正则表达式不是我最喜欢的消遣时间。
    【解决方案2】:

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

    1. 如果它以/ 开头,则在前面加上http://domain.com
    2. 如果它以.. 开头,则必须split 完整的URL 和hack off pieces,直到src 以/ 开头
    3. 否则(以字母开头),获取完整域,strip it down to the last slash 然后附加 src URL。

    或者....偷懒偷这个脚本

    $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

    【讨论】:

    猜你喜欢
    • 2012-10-16
    • 1970-01-01
    • 2012-08-28
    • 2016-11-30
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2017-09-21
    相关资源
    最近更新 更多