如何使用XPath从HTML Scrapy中过滤图像?

时间:2016-04-21 20:06:40

标签: html xml xpath web-scraping scrapy

我试图使用Scrapy获取各种文章的HTML。这些文章还包括我想单独处理的图像。

如果我的文章的HTML如下所示:

<div class="article>
  <p>This is a sentence.</p>
  <p>This is a sentence.</p>
  <img src="/path/to/image.jpg"/>
  <p>This is a sentence.</p>
  <p>This is a sentence.</p>
</div>

如何抓取非图像HTML,或者:

<div class="article>
  <p>This is a sentence.</p>
  <p>This is a sentence.</p>
  <p>This is a sentence.</p>
  <p>This is a sentence.</p>
</div>

我目前正在尝试:

article = response.xpath("//div[@class='article'][not(img)]").extract()

...但这还包括图片。

2 个答案:

答案 0 :(得分:1)

XPath用于选择,而不是转换或重新排列。

您可以选择没有div个孩子的img元素:

//div[@class='article' and not(img)]

或没有img后代:

//div[@class='article' and not(.//img)]

或者,您可以选择div的{​​{1}}元素的内容:

p

或不是//div[@class='article']/p

img

但是你无法选择所请求的HTML,

//div[@class='article']/*[not(self::img)]

因为这是输入文档中存在的标记的重新排列,而不是选择。

答案 1 :(得分:0)

请尝试以下代码:

article = response.xpath("//div[@class='article']//*[not(self::img)]").extract()