XPath选择图像链接 - img src的父href链接只有它存在,否则选择img src链接

时间:2016-06-24 03:16:03

标签: python xpath web-scraping scrapy

我遇到了一个有点复杂的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。

2 个答案:

答案 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