如何刮取每个li标签的img src值


How to scrape img src value of each li tag

<ul class="vehicle__gallery cf">
<li><a href="#"><img src="AETV19098412_2a.jpg"></a></li>
<li><a href="#"><img src="AETV19098412_3a.jpg"></a></li>
<li><a href="#"><img src="AETV19098412_4a.jpg"></a></li>
</ul>

和my preg匹配的语法如下:

preg_match_all('/<ul class="vehicle__gallery cf">.*?<li>.*?<a(.*?)href="(.*?)"(.*?)>(.*?)<'/a>.*?<'/li>.*?<'/ul>/s', $html_image,$posts, PREG_SET_ORDER);

你不用正则表达式来解析HTML。这行不通。

  • <li>标签不总是有结束标签,<img>标签也没有。
  • 标签可以有n个属性
  • 属性值并不总是放在双引号中

使用像simpledomparser这样的html解析器

我甚至不会尝试为它想出一个正则表达式,因为在某些时候它会失败。

如果你给你的img标签一个class之类的,例如:

<img class="gallery_item" src="AETV19098412_2a.jpg">
<img class="gallery_item" src="AETV19098412_3a.jpg">

你可以做得更简单:

preg_match('/<img class="gallery_item" src="(.*)">/');

然而,这仍然是非常hacky,如果你曾经添加一个css类,html属性或修改你的代码,你有问题,你的代码可能无法工作了

这个解决方案是任何其他的干净,你应该考虑使用JQuery或表单,如我之前的评论中所述,将使你的生活更容易,代码不会因为未来,小的html更改而中断,可能会出现在任何一天。

另一种方法是使用javascript (jquery)。

var imgArr = []
$("ul.vehicle__gallery li img").each(function(){
     imgArr.push($(this).attr('src'));
})