XPath 选择图像链接 - 仅当 img src 的父 href 链接存在时,否则选择 img src 链接
Posted
技术标签:
【中文标题】XPath 选择图像链接 - 仅当 img src 的父 href 链接存在时,否则选择 img src 链接【英文标题】:XPath select image links - parent href link of img src only if it exists, else select img src link 【发布时间】:2016-10-26 13:58:56 【问题描述】:我遇到了一个有点复杂的 XPath 问题。考虑这个网页部分的 html(我使用了 Imgur 并替换了一些文本):
<a href="//i.imgur.com/ahreflink.jpg" class="zoom">
<img class="post-image-placeholder" src="//i.imgur.com/imgsrclink.jpg">
</img>
</a>
我首先要搜索文档中的所有img
标签,并找到它们对应的src
es。接下来,我想检查img src
链接是否包含图像文件扩展名(.jpeg、.jpg、.gif、.png)。如果它不包含图像扩展名,请不要抓住它。在这种情况下,它具有图像扩展名。现在我们想弄清楚我们想要抓取哪个链接。既然parent href
是存在的,那我们就去抓取对应的链接吧。
想要的结果://i.imgur.com/ahreflink.jpg
但现在假设parent href
不存在:
<a name="missing! oh no!">
<img class="post-image-placeholder" src="//i.imgur.com/imgsrclink.jpg">
</img>
</a>
想要的结果://i.imgur.com/imgsrclink.jpg
我该如何构建这个 XPath?如果有帮助,我还将 Python (Scrapy) 与 XPath 一起使用。所以如果需要分离出问题,也可以使用Python。
【问题讨论】:
到目前为止你有没有尝试过? 我只到了我检查链接的图像扩展的部分,但对如何选择要抓取的链接感到困惑。 您想尝试完全使用 XPath 来实现结果,还是您使用的脚本语言可以实现一些逻辑? 哪个可以产生更清洁和更有效的解决方案。我正在使用 python。 我已将其添加到您的标签中。我不懂python,祝你好运! 【参考方案1】:这在单个 xpath 表达式中非常简单:
//a[not(@href)]/img/@src | //a[img]/@href
【讨论】:
哇,我从没想过优先考虑 img src(而不是),因为从逻辑上讲,我们首先优先考虑 href。看起来是一个很有前途的解决方案,但我必须先对其进行测试。 @dtgee 没有优先级,只有过滤器。【参考方案2】:您不必在单个 XPath 表达式中执行此操作。这是一个省略图像扩展检查的 Scrapy 特定实现(根据 cmets 判断,您已经弄清楚了):
images = response.xpath("//a/img")
for image in images:
a_link = image.xpath("../@href").extract_first()
image_link = image.xpath("@src").extract_first()
print(a_link or image_link)
【讨论】:
啊,谢谢。我想我陷入了恍惚,认为我必须只使用 XPath 来选择所有内容。我将从这个错误中吸取教训! @dtgee 您可能确实想在 xpath 中执行此操作,以便在 C 而不是 Python 中完成繁重的工作。 是的。使用 Python 使代码更具可读性,但我想使用 XPath 并添加一些 cmets 可以达到相同的目的。以上是关于XPath 选择图像链接 - 仅当 img src 的父 href 链接存在时,否则选择 img src 链接的主要内容,如果未能解决你的问题,请参考以下文章
最近在自学python girlphoto_urls = selector.xpath('//div/a/img/@src')这句是啥意思?大神