【问题标题】:How can I filter images out of HTML Scrapy with XPath?如何使用 XPath 从 HTML Scrapy 中过滤图像?
【发布时间】:2016-04-21 20:06:39
【问题描述】:

我正在尝试使用 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()

...但这仍然包括图像。

【问题讨论】:

    标签: html xml xpath web-scraping scrapy


    【解决方案1】:

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

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

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

    或者没有img后代:

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

    或者,您可以选择div元素的内容p

    //div[@class='article']/p
    

    或者不是img:

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

    但您无法选择请求的 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>
    

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

    【讨论】:

    • 知道了 - 这就是为什么其他回复 (//div[@class='article']/*[not(self::img)]) 根本没有返回 nothing ......因为我试图选择的文章有图片,而且只会选择没有图片的文章?
    • 您在评论中提到的 XPath 将选择所有文章 div 元素的所有非图像子元素。如果它没有选择任何内容并让您感到惊讶,我必须查看 HTML 才能说更多。
    【解决方案2】:

    试试下面的代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      相关资源
      最近更新 更多