从li标签提取数据href

时间:2018-10-09 07:58:51

标签: php laravel domparser

我正在尝试提取data-href的URL,但是遇到了一些麻烦。它没有标签。所以我不知道如何获取data-href属性。该网站位于:https://www.proud-web.jp/search/kansai/area/osaka/

这是我想要的数据:

<div class="box-search-result">
            <form action="/module/material/SiryoOrderTop.xphp" method="GET" name="favoritebox" target="_blank">
                    <ul class="list-search-result">
                        <li class="list-search-result-item" data-href="https://www.proud-web.jp/kansai/mansion/shimizudani/" 

这是我的代码:

$url = 'https://www.proud- web.jp/search/kansai/area/osaka/';
$parser = getSiteContent($url);

$link = [];
$allDivs = [];
$allDivs = $parser->getElementsByTagName('div');
    foreach ($allDivs as $div) {
      if ($div->getAttribute('class') == 'box-search-result') {
          $linkRef = $div->getAttribute('data-href');
          var_dump($linkRef);

   }
}

如何获取data-href的URL?任何想法?谢谢! 我正在使用DOMparser。

1 个答案:

答案 0 :(得分:1)

您想从每个li中获取div元素,然后获取data-href属性。您只是想从div抓起

$allDivs = $parser->getElementsByTagName('div');
    foreach ($allDivs as $div) {
      if ($div->getAttribute('class') == 'box-search-result') {
          $allLi = $div->getElementsByTagName('li');
          foreach ($allLi as $li){
          $linkRef = $li->getAttribute('data-href');
          var_dump($linkRef);
          }

   }
}

我不是100%肯定domParser的语法,但是问题与您抓住div而不是li时一样。您可能必须遍历childNodes变量的$div属性,并检查nodeName是否为ul,然后遍历那些变量的childNodes属性寻找li作为nodeName例如

$allDivs = $parser->getElementsByTagName('div');
        foreach ($allDivs as $div) {
          if ($div->getAttribute('class') == 'box-search-result') {
              foreach($div->childNodes as $node) {
                   if($node->nodeName == 'ul') {
                        foreach($node->childNodes as $liNode) {
                             if ($liNode->nodeName == 'li') {
                                 $linkRef = $liNode->getAttribute('data-href');
                                 var_dump($linkRef);
                             }
                        }
                   }
              }

       }
    }