【问题标题】:How to get the src of all images within a ul using xpath如何使用xpath获取ul中所有图像的src
【发布时间】:2015-02-01 05:59:10
【问题描述】:

我需要找到所有属于这个 ul 的图像的 src。我正在使用 xpath 来做到这一点。但它只返回第一张图片的 src。如何获取所有 src ?这是我的 HTML 结构。

<ul id="product-slider">
  <li >
    <img src="1.jpg" width="310" height="363" />
  </li>
  <li>
    <img src="2.jpg" style="opacity: 1;">
 </li>
 <li>
    <img  width="310" height="363" src="3.jpg">
 </li>      
</ul>

这是我的代码 sn-p。

$img = $xpath->query("//ul[@id='product-slider']//img/@src");
foreach($img as $i){
  echo $i->nodeValue;
}

它没有找到除第一个之外的所有图像的src。 有人可以提供一些帮助吗?

看看这个http://codepad.viper-7.com/RiiFfK

【问题讨论】:

  • 代替$i->nodeValue;使用 $i->getAttribute('src');

标签: php html xpath web-scraping


【解决方案1】:

要获取此 ul 内的所有图像(实际上是来自 src 属性的所有值)的列表,在您的情况下,您可以使用 XPath Axes:

//ul[@id='product-slider']/descendant::img/@src

这是做什么的:

  1. /ul[@id='product-slider'] 选择带有id='product-seller'ul 元素

  2. /descendant::imgul 中选择所有后代(子、孙等)

  3. /@src 选择每个后代的src 属性。

XPath Axes 是一个很棒的工具,您可以在此处找到有关它的更多信息:http://www.w3schools.com/xpath/xpath_axes.asp(我知道它们不是最可靠的来源,但这个 XPath 教程是一个很好的介绍)。

编辑:以OP的新代码sn-p from codepad为例: 从Snapdeal Link 的源代码中捕获的元素是以下ul,其中只有第一个img 标记包含src 属性。

	<ul id="product-slider" class="mainImageSlider">
		<li>
			<img title="Apple iPhone 5S 16 GB (Gold)"  class="jqzoom zoomPad lazyBg" itemprop="image"  src="http://n2.sdlcdn.com/imgs/a/j/x/large/Apple-iPhone-5S-16-GB-SDL218153659-1-d5617.jpg" width="310" height="363" alt="Apple iPhone 5S 16 GB (Gold)" bigimage="http://n4.sdlcdn.com/imgs/a/j/x/Apple-iPhone-5S-16-GB-SDL218153659-1-d5617.jpg">
		</li>
		<li>
			<img title="Apple iPhone 5S 16 GB (Gold)"  class="jqzoom zoomPad lazyBg"  lazySrc="http://n1.sdlcdn.com/imgs/a/j/x/large/Apple-iPhone-5S-16-GB-SDL218153659-2-af89e.jpg" width="310" height="363" alt="Apple iPhone 5S 16 GB (Gold)" bigimage="http://n1.sdlcdn.com/imgs/a/j/x/Apple-iPhone-5S-16-GB-SDL218153659-2-af89e.jpg">
		</li>
		<li>
			<img title="Apple iPhone 5S 16 GB (Gold)"  class="jqzoom zoomPad lazyBg"  lazySrc="http://n4.sdlcdn.com/imgs/a/p/0/large/Apple-iPhone-5S-16-GB-SDL218153659-3-14019.jpg" width="310" height="363" alt="Apple iPhone 5S 16 GB (Gold)" bigimage="http://n4.sdlcdn.com/imgs/a/p/0/Apple-iPhone-5S-16-GB-SDL218153659-3-14019.jpg">
		</li>
		<li>
			<img title="Apple iPhone 5S 16 GB (Gold)"  class="jqzoom zoomPad lazyBg"  lazySrc="http://n4.sdlcdn.com/imgs/a/p/0/large/Apple-iPhone-5S-16-GB-SDL218153659-4-fa8f3.jpg" width="310" height="363" alt="Apple iPhone 5S 16 GB (Gold)" bigimage="http://n4.sdlcdn.com/imgs/a/p/0/Apple-iPhone-5S-16-GB-SDL218153659-4-fa8f3.jpg">
		</li>
	</ul>

【讨论】:

  • 感谢以上解释。但是它仍然只返回一个图像的 src。 @bruno 请看看这个link
  • @Shubham 如果您在 snapdeal 上查看目标 ul 的源代码,您将看到只有第一个 img 包含 src 属性;所有其他都包含 lazySrc 属性。例如,如果您使用@bigimage 尝试上述相同的 XPath,您将获得 4 个 url。
  • 四个标签都包含src属性@bruno
  • 它没有。我刚刚更新了答案,请检查。顺便说一句,最好使用id 而不是class 来匹配XPath 表达式:它们的唯一性更可靠。
猜你喜欢
  • 1970-01-01
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 2012-09-30
  • 2019-08-15
  • 1970-01-01
相关资源
最近更新 更多