繁体   English   中英

尝试使用xpath获取页面中的所有图像

[英]trying to fetch all the images in a page using xpath

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

我想到正则表达式返回的src并寻找主机,如果主机不在那里使用该网站的网址,但这可能很难检查..

我也想也许我应该解析网址并检查['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>';
                }

            }
        }
    }

非常感谢任何帮助。

  1. 将您的xpath查询更改为//img[src] 这将返回所有具有src属性的img元素。 使用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. 关于相对路径问题,您应该找到base元素 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);

键盘

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM