Php 循环通过div并使用simplehtmldom提取文本

Php 循环通过div并使用simplehtmldom提取文本,php,web-scraping,simple-html-dom,Php,Web Scraping,Simple Html Dom,我正在使用simplehtmldom从一个站点获取html。然后我搜索页面上的所有div并 显示字数大于300的内部文本。为此,我使用foreach进行迭代 $findDivs = $html->find('div'); foreach($findDivs as $findDiv) { $wordCount = explode(' ', $findDiv->outertext); $wordCount = count($wordCount); if($wordCount

我正在使用simplehtmldom从一个站点获取html。然后我搜索页面上的所有div并 显示字数大于300的内部文本。为此,我使用foreach进行迭代

$findDivs = $html->find('div');

foreach($findDivs as $findDiv) {
  $wordCount = explode(' ', $findDiv->outertext);
  $wordCount = count($wordCount);
  if($wordCount <= 300) {
    $findDiv->outertext = '';
   }
   else {
     echo $findDiv->outertext . '<br />';
  }
}
$findDivs=$html->find('div');
foreach($findDiv作为$findDiv){
$wordCount=explode(“”,$findDiv->outertext);
$wordCount=count($wordCount);
如果($wordCount outertext='';
}
否则{
echo$findDiv->outertext.“
”; } }

我的问题是结果被复制了6次。我只能假设这是因为所有div在每次迭代中都是循环的。但是,我不确定我可以使用什么技术来确保每个div只评估一次。

您想要
内部文本
,但您的代码声明
外部文本
-I这就是复制的原因

foreach($html->find('div') as $findDiv) {
  $wordCount = explode(' ', $findDiv->innertext);
  $wordCount = count($wordCount);
  if($wordCount > 300) {
    echo $findDiv->outertext . '<br />';
   }
}
foreach($html->find('div')作为$findDiv){
$wordCount=explode(“”,$findDiv->innertext);
$wordCount=count($wordCount);
如果($wordCount>300){
echo$findDiv->outertext.“
”; } }
我不知道为什么,但这解决了我的问题

我在$html->find('div',1)中添加了'1'参数

因此,工作代码如下所示:

$findDivs = $html->find('div',1);  //add a 1 to the divs. this works as the script now only loops once.

foreach($findDivs as $findDiv) {
  $wordCount = explode(' ', $findDiv->outertext);
  $wordCount = count($wordCount);
  if($wordCount <= 300) {
    $findDiv->outertext = '';
   }
   else {
     echo $findDiv->outertext . '<br />';
  }
}
$findDivs=$html->find('div',1);//将1添加到div中。这是因为脚本现在只循环一次。
foreach($findDiv作为$findDiv){
$wordCount=explode(“”,$findDiv->outertext);
$wordCount=count($wordCount);
如果($wordCount outertext='';
}
否则{
echo$findDiv->outertext.“
”; } }
你好,David,谢谢你,但我担心我尝试了innertext、outertext和plaintext,每次重复的结果都是一样的。递归迭代div,如果div包含300多个单词,则不要处理div的子项。请提供示例html。否则,你不太可能得到建设性的帮助。