代码之家  ›  专栏  ›  技术社区  ›  giser_yugang

如何在scrapy中按顺序导出<em>标记的文本

  •  1
  • giser_yugang  · 技术社区  · 6 年前

    我正在使用scrapy解析HTML文件,其内容如下:

    <p class="title">
        <a href="#">#Who#</a>
        I don't <em>know</em>
        who you are
    </p>
    

    我想按顺序提取不包含“a”标记的所有文本,所以我希望得到的结果是

    ["I don't ", 'know', 'who you are']
    

    我试图使用以下代码

    >>>selector = Selector(text="<p class='title'><a href='#'>#Who#</a>I don't <em>know</em>who you are</p>")
    >>>p_txt =selector.xpath('//p[@class="title"]/text()').extract()
    ["I don't ", 'who you are']
    

    结果,忽略了'em'标记中的文本

    >>>p_txt =selector.xpath('//p[@class="title"]/descendant::text()').extract()
    ['#Who#', "I don't ", 'know', 'who you are']
    

    但它也会将文本导出到“a”标记中。有没有好的解决方案?

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Andersson    6 年前

    尝试使用下面的XPath获取 p 排除 文本节点来自 a :

    //p[@class="title"]//text()[not(parent::a)]
    

    P、 如果链接看起来像 <a href="#">something <b>bold</b> inside</a> 你可能需要替换 (parent::a) 具有 (ancestor::a)