我一直在尝试使用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中提取所有语句。
我希望我清楚查询。如果您需要进一步解释,请告诉我。