【问题标题】:How to specify xpath to get data from parent and child with condition?如何指定 xpath 以从有条件的父母和孩子那里获取数据?
【发布时间】:2015-04-28 08:37:45
【问题描述】:

我想提取图片的链接,但前提是该图片的名称中不包含“thumb”一词。

<a title="" rev="http://insales.ru/images/ large.jpeg"  href="http://insales.ru/images/T001.jpeg" class="TestClass">
    <img src="http://insales.ru/images/thumb.jpeg" class="productimage">
</a>

所以如果只有图片名称没有“thumb”关键字,我想从&lt;img&gt;标签中提取“http://insales.ru/images/thumb.jpeg”行。

我正在尝试这样做:

//a[@class='TestClass']//img[not(contains(@src, 'thumb'))]

不工作。因为我现在正在丢失来自&lt;a&gt; 的数据。

有时我会直接从&lt;a&gt; 标签中提取链接。从 rev 或 href。但有时来自&lt;img&gt;&lt;a&gt; 的孩子。

如何指定允许从父级或其子级提取链接的 xpath。但是孩子是有条件的。

详情:

我正在解析来自在线商店的数据。具体来说,我正在尝试获取产品的图像。我提供的代码代表产品的一张图片。我只需要大版本的图片。不是小缩略图。问题是有时链接到&lt;a&gt; 标签的 rev 属性中显示的大图。有时它会出现在&lt;img&gt; 标签的 src 属性中。

案例1(我需要在&lt;a&gt;标签和rev属性中提供链接

    <li class='product-item'>
      <a title="" rev="http://insales.ru/images/ large.jpeg"    href="http://insales.ru/images/T001.jpeg" class="MagicThumb-swap">
          <img src="http://insales.ru/images/thumb_T001" class="productimage" title=" Tissot">
      </a>
    </li> 

在这种情况下,我需要提取 http://insales.ru/images/large.jpeg 行。我不需要在&lt;img&gt; 标签中的http://insales.ru/images/thumb_T001

案例2(我需要在&lt;img&gt;标签和src属性中提供链接)

<div class='item'>
      <a title="" id="Zoomer" class="MagicZoomPlus jqzoom modal" href="http:// insales.ru/images/thumbi14.jpg" >
         <img src="http://insales.ru/images/large_i14.jpg" title="Orient” class="productimage">
      </a>
</div>

在第二种情况下,我需要提取 http://insales.ru/images/large_i14.jpg 行。而且我不需要 &lt;a&gt; 标签中的 http://insales.ru/images/thumbi14.jpg。

我知道如何在这两种情况下提取链接。但我不知道如何制作通用 xpath 以允许在两种情况下获取大图片的链接。那就是为什么我要根据链接中的图片名称来创建条件。如果链接中有“拇指”关键字,我会尝试将其过滤掉。

【问题讨论】:

  • 您想从a 元素中获得哪一段HTML?请展示一个更大的 HTML 示例,并包含所有可能的场景:应该直接从 a 元素中选择某些东西的情况,应该选择 img 元素的 source 属性的情况,一种情况不应该选择img/@source,并且应该选择a中没有任何内容的情况(如果有这种情况)。并显示您希望从更大样本中获得的准确输出。
  • 我对我正在尝试做的事情做了更具体的描述。在我的问题中详细说明之后。

标签: html xpath


【解决方案1】:

如果我现在理解正确的话,正确的路径表达式是

//a/@rev[not(contains(.,'thumb'))] | //img/@src[not(contains(.,'thumb'))]

其中| 是组合节点集的union operator

假设输入文档像

<html>
<li class='product-item'>
    <a title="" rev="http://insales.ru/images/ large.jpeg"    href="http://insales.ru/images/T001.jpeg" class="MagicThumb-swap">
          <img src="http://insales.ru/images/thumb_T001" class="productimage" title=" Tissot"/>
    </a>
</li>
<div class='item'>
      <a title="" id="Zoomer" class="MagicZoomPlus jqzoom modal" href="http:// insales.ru/images/thumbi14.jpg" >
         <img src="http://insales.ru/images/large_i14.jpg" title="Orient" class="productimage"/>
      </a>
</div>
</html>

结果将是(由-----------分隔的各个结果):

rev="http://insales.ru/images/ large.jpeg"
-----------------------
src="http://insales.ru/images/large_i14.jpg"

如果您需要包含aclass 属性:

//a[@class='TestClass']/@rev[not(contains(.,'thumb'))] | //a[@class='TestClass']/img/@src[not(contains(.,'thumb'))]

但是,您没有在“详细”描述中提到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2017-05-31
    相关资源
    最近更新 更多