如何限制PHP DOM解析列出的项目内容来自与其他div具有相同类名的div

时间:2017-05-28 16:51:35

标签: php parsing dom web-crawler

我一直在尝试使用php dom解析器代码解析网站上的内容,

它运行正常但不幸的是网站中的各个div具有相同的类名,因此当我尝试从div中解析内容时,它会从所有div中提取数据班级名称,

所以,我对每个div的解析内容设置了一个限制,现在它工作正常,但我最近面临另一个问题,因为当原始网站所有者更新任何特定div中的内容时,整个限制代码变得混乱并再次提取所有内容。

网站的HTML如下:

<div class="newsblock-1st-col">
   <ul>
      <li><a class="itemtitle" href"#">some text </a></li>
      <li><a class="itemtitle" href"#">some text </a></li>
      <li><a class="itemtitle" href"#">some text </a></li>
      <li><a class="itemtitle" href"#">some text </a></li>
      <li><a class="itemtitle" href"#">some text </a></li>
   </ul>
</div>

<div class="newsblock-1st-col">
   <ul>
      <li><a class="itemtitle" href"#">other text </a></li>
      <li><a class="itemtitle" href"#">other text </a></li>
      <li><a class="itemtitle" href"#">other text </a></li>
   </ul>
</div>

到目前为止,我的PHP代码为::

<div class="newsblock">
    <div style="clear:both"></div>
        <ul>
            <?php
                set_time_limit(3600);
                require_once('dom/simple_html_dom.php'); 
                $html = file_get_html('https://milesfeed.com/');
                $elementCount=0;
                $i = 1;
                foreach($html->find('div.newsblock-1st-col') as $elemen) {                  
                if ($i < 1) {
                $i++;
                continue;
            }
            foreach($elemen->find('li a.itemtitle') as $element) {
                $elementCount++;
                    $element->href = " " . $element->href; 
                echo '<li class="itemtitle"><a target="_blank"';
                    echo $element;
                echo '</li>';                           
            }
            if($elementCount==5){
               break;
            }
        }   
    ?>      
</ul>
</div>

现在的问题是我试图从类中提取内容为newsblock-1st-col的div。但不幸的是,还有另一个具有相同类的div,并且由于这个原因,它从类的其他div中提取语句。

所以,我设置了一个限制中断,要求在从第一个div中提取5个语句后打破整个解析代码,然后它运行另一个仅针对第二个div运行的解析代码。为:

<div class="newsblock">
        <div style="clear:both"></div>
            <ul>
                <?php
                    set_time_limit(3600);
                    require_once('dom/simple_html_dom.php'); 
                    $html = file_get_html('https://milesfeed.com/');
                    $elementCount=0;
                    $i = 1;
                    foreach($html->find('div.newsblock-1st-col') as $elemen) {                  
                    if ($i < 2) {
                    $i++;
                    continue;
                }
                foreach($elemen->find('li a.itemtitle') as $element) {
                    $elementCount++;
                        $element->href = " " . $element->href; 
                    echo '<li class="itemtitle"><a target="_blank"';
                        echo $element;
                    echo '</li>';                           
                }
                if($elementCount==3){
                   break;
                }
            }   
        ?>      
    </ul>
    </div>

它按预期工作正常。但如果主要网站div语句增加或减少,整个解析代码就会变得疯狂。就像如果html站点中的第一个div语句再添加2个语句使其总共为7,那么if elementcount命令就会被破坏,使得解析代码从所有具有相同类名的div中提取所有语句。

我希望我清楚查询。如果您需要进一步解释,请告诉我。

0 个答案:

没有答案