查找xpath祖父母(使用scrapy)

Posted

技术标签:

【中文标题】查找xpath祖父母(使用scrapy)【英文标题】:Find xpath grandparent (using scrapy) 【发布时间】:2021-03-21 15:33:53 【问题描述】:

我正在尝试使用单篇博文抓取(使用 scrapy)一个新闻博客。在博客上有不同的类别。 html 代码如下所示:

<div class="container news-archive">
   <h1 class="Category</h1>
   <div class="news-item-wrap">
      <div class=" col-xs-12 .... </div>
      <div class=" col-xs-12 .... </div>
      <div class=" col-xs-12 .... </div>

相关的scrapy代码如下:

def parse(self, response):

    single_blogpost = response.xpath(".//*[@class='col-xs-12 col-sm-6 col-md-4 col-lg-3 col-xl-2']")

    for blogpost in single_blogpost:
        blogpost_category = blogpost.xpath(".//[@class='col-xs-12 col-sm-6 col-md-4 col-lg-3 col-xl-2']/ancestor::div[2]").extract()
        blogpost_title = blogpost.xpath(".//*[@class='post-title']/h1/text()").extract()
        blogpost_body = blogpost.xpath(".//*[@class='content']/div[@class='aspect-ratio-inner']/text()").extract_first()

所以我需要找到每篇博文的祖先(祖父母)来提取类别。我试过以下代码:

blogpost_category = blogpost.xpath(".//[@class='col-xs-12 col-sm-6 col-md-4 col-lg-3 col-xl-2']/ancestor::div[2]").extract()
blogpost_category = blogpost.xpath(".//[@class='col-xs-12 col-sm-6 col-md-4 col-lg-3 col-xl-2']/../parent::div").extract()
blogpost_category = blogpost.xpath(".//[@class='col-xs-12 col-sm-6 col-md-4 col-lg-3 col-xl-2']/../..").extract()

它们都不起作用,我得到空输出,因为每次尝试都以 xpath ValueError 结束。 有谁知道如何找到祖父母?

【问题讨论】:

【参考方案1】:

好吧,我只是多尝试了一些,自己找到了答案:

blogpost_category = blogpost.xpath(".//ancestor::div/h1/text()").extract_first()

需要Extract_first,否则它会提取Category以及Title(也是一个div --> h1)

【讨论】:

以上是关于查找xpath祖父母(使用scrapy)的主要内容,如果未能解决你的问题,请参考以下文章

scrapy学习笔记 1,第一次使用scrapy

第一次使用scrapy,记下爬过的坑

scrapy基础 之 xpath网页结构

Python中Scrapy框架元素选择器XPath的简单实例

通过xpath相对节点位置查找元素

scrapy用xpath解析的内容怎么去除空格