1

我正在尝试使用 Xpath 捕获页面上的所有图像,然后遍历节点列表检查图像是否具有属性,如果它有我遍历属性直到我到达 src 现在我的问题是当我获得相对路径/us/english/images/12/something.jpeg时类似的东西..我的问题是:有没有办法获得完整的路径?

我想到了正则表达式返回的 src 并在主机不存在时查找主机使用站点的 url 但这可能很难检查..

我还想也许我应该解析 url 并检查 ['host'] 部分,如果主机部分有“。”点意味着有主机,我不应该添加它?

这是我到目前为止所拥有的:

$image_list = $xpath->query('//img');
    foreach($image_list as $element){
        if($element->hasAttributes()){
            foreach($element->attributes as $attribute){
                if(strtolower($attribute->nodeName) == 'src'){
                    echo $attribute->nodeName. ' = ' .$attribute->nodeValue.'<br>';
                }

            }
        }
    }

将不胜感激任何帮助。

4

1 回答 1

3
  1. 将您的 xpath 查询更改为//img[src]. 这将返回所有img具有src属性的元素。使用getAttribute方法。你的代码会更短更高效。

    $image_list = $xpath->query("//img[@src]");
    for($i=0;$i<$image_list->length; $i++){
        echo "src = ". $image_list->item($i)->getAttribute("src"). "\n";
    }
    
  2. 关于相对路径问题,您应该找到baseelements href属性。如果找到,则将其用作相对 url 的基本 URI。如果未找到,请尝试查找此文档的 URL。这将是基本 URI。

更新

因为您想读取复杂 url 中的图像文件路径,例如

//lp.hm.com/hmprod?set=key[source],value[/environment/2012/P01_2972_044R_0.‌​‌​jpg]&amp;set=key[rotate],value[0.65]&amp;set=key[width],value[2921]&amp;set=key[‌​h‌​eight],value[3415]&amp;set=key[x],value[1508]&amp;set=key[y],value[495]&amp;se‌​t=k‌​ey[type],value[FASHION_FRONT]&amp;call=url[file:/product/large]

你最好使用这样的自定义解析器,

$url = $image_list->item($i)->getAttribute("src");
$q = strpos($url, "?");
$query = substr($url, $q+1);
$params = explode("&", html_entity_decode($query));
$data = array();
foreach($params as $e){
    if(preg_match("/key\[([^\]]+)\],value\[([^\]]+)\]/", $e, $m))
        $data[$m[1]]=$m[2];
    elseif(preg_match("/call=([^\[]+)\[([^\]]+)\]/", $e, $m))
        $data[$m[1]]=$m[2];
}

print_r($data);

键盘

于 2013-01-01T03:00:21.387 回答