我遇到了一个有点复杂的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。
答案 0 :(得分:4)
您不必在单个XPath表达式中执行此操作。这是一个Scrapy特定的实现,省略了图像扩展检查(通过评论来判断,你已经认识到了这一点):
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)
答案 1 :(得分:4)
在单个xpath表达式中这很简单:
//a[not(@href)]/img/@src | //a[img]/@href