首页 > 解决方案 > 将数据刮取为

  • 在封装为标签的两个已知关键字之间
  • 问题描述

    标签: python-3.xxpathweb-scrapingscrapy

    解决方案


    您可以使用xpath选择器完成此操作:

    '//p[contains(b/text(),"Contre-indications")]/following-sibling::ul[1]/li/text()'
    

    解释 xpath:

    //p- 选择所有段落节点
    [contains(b/text(),"Contre-indications")]- 在子节点 b 的文本中包含一些文本
    //following-sibling::ul[1]- 选择第一个无序列表类型的段落节点的兄弟。
    //li/text()- 选择作为列表节点的任何子节点的文本

    如果你在 scrapy shell 中运行它:

    $ scrapy shell
    > body = ...
    > from parsel import Selector
    > sel = Selector(text=body)
    > sel.xpath('//p[contains(b/text(),"Indication")]/following-sibling::ul[1]/li/text()').extract()
    ['dissolution des calculs urinaires de struvite', 'gestion des récidives d’urolithiase à struvite et à oxalate de calcium dans un seul aliment']
    > sel.xpath('//p[contains(b/text(),"Contre-indications")]/following-sibling::ul[1]/li/text()').extract()
    ['insuffisance rénale chronique, acidose métabolique', "traitement avec des médicaments acidifiant l'urine", 'lactation, gestation, croissance']
    

    推荐阅读