Scrapy选择器:获取一个元素的第n个孩子的文本

0 人关注

我正在使用Scrapy选择器从html中提取字段

xpath = /html/body/path/to/element/text()

这与问题类似 scrapy获取同一类别的第n个孩子的文本 根据文档,我们可以使用 .getall() 方法来获取所有元素,并从列表中选择特定的元素。

selected_list = Selector(text=soup.prettify()).xpath(xpath).getall()

有没有可能在xpath本身中直接指定选择第n个元素? 像下面这样

xpath = /html/body/path/to/element/text(2) #to select 3 child text
    <i class="ent_sprite remind_icon">
    text that needs to be
</body>

The result of response.xpath('/body/div/text()').getall() consist of 2 elements

  • 'text that needs to be'
  • 4 个评论
    you can do .../element[3]/text()
    【替换代码0 @Piron 问题是,我想提取的是第二个文本元素,而不是第二个元素
    你能把XML ?第一个和第二个文本元素。
    @Piron 添加了问题中的例子
    python
    html
    regex
    xpath
    scrapy
    user6863891
    user6863891
    发布于 2020-01-07
    1 个回答
    Moein Kameli
    Moein Kameli
    发布于 2020-01-09
    已采纳
    0 人赞同

    你可以使用 following-sibling:: 来拥有表达式的最近兄弟姐妹(向下)。例如,在这种情况下,你想要 text() 的最近的 <i> 标签,所以你可以这样做。

    response.xpath('//i[@class="ent_sprite remind_icon"]/following-sibling::text()').get()