使用Simple HTML Dom Parser更好的方法

时间:2016-08-04 15:39:05

标签: php simple-html-dom

我的HTML代码是代码重复16次:

app.use(function(req, res, next) {
  //do everything you want to happen on every request
  next();
});

app.listen(app.get('port'), function() {
  console.log('listening on port ' + app.get('port'));
});

我想知道我所做的所有imgs链接和文字:

<div class="headline_image">
<a ga-cat="slideshow-view" ga-action="view-1" href="mylink"><img src="http://dd4994.jpg" width="420" height="323" align="right" alt="my text "/></a>
</div>

代码是否有任何变化?

3 个答案:

答案 0 :(得分:0)

通过使用过多的匿名对象来减慢代码速度。这意味着你不要将函数的结果放入一个变量中,而只是在运行中使用它&#34;&#34;。这需要一次又一次地运行你的功能。

因为你可以使用函数find来返回一个数组,所以我建议你在for循环之前这样做。

$imgarray = $html->find('div[class=headline_image] img', $x);

这样你只需运行$html->find一次,而不是十六次。在for循环中,您可以将其用作数组并使用结果:$imgarray[$x]。你为$anchorarray做了同样的事情,你的代码会加快,你会看到。

替代解决方案是在容器中使用PHP DOM $childNodes,其中可以找到这个16项(或body元素)。这将返回16个div元素,您可以通过为$firstChild元素调用<a>并为<img>元素再次调用$ firstChild来导航。如果你想对网站进行更改(比如在最后添加更多内容等),这可能更安全。

答案 1 :(得分:0)

嘿Daniel我把代码更改为:

    $imgarray = $html->find('div[class=headline_image] img');
$linkarray = $html->find('div[class=headline_image] a');
for ($x = 0; $x <=  15; $x++) {

 echo $imgarray[$x]->getAttribute('src');
   echo '<br/>';
  echo $imgarray[$x]->getAttribute('alt');
     echo '<br/>';
   echo $linkarray[$x]->getAttribute('href');
  echo '<br/>';

    }

答案 2 :(得分:0)

一般来说,迭代的正确方法如下所示: foreach($ html-&gt; find(&#39; div&#39;)as $ div){   echo $ div; }