如何使用Scrapy的css或xpath选择器选择ul特定的li子文本?

时间:2016-12-14 13:54:40

标签: jquery html css xpath css-selectors

下面是HTML,我正在研究:

<div class="grdcpnsmllnks">
    <ul>
        <li><i class="fa fa-check-square"></i>Verified Offer</li>
        <li><i class="fa fa-eye"></i><label id="ltveri276270">Offer used 1 hour ago</label></li>
        <li><i class="fa fa-clock-o"></i>Valid till 31/12/2016</li>
    </ul>
</div>

以下是我的代码段:

def parse_item(self, response):
    endDate = response.xpath('//div[@class='grdcpnsmllnks']/ul/li/i[@class='fa-clock-o']::dd[1]/text()').extract()
        yield {
            'endDate': endDate
        }

我希望选择有效期至2016年12月31日的文本。我在首先选择所需的<li>标签时遇到问题,然后进一步选择任何标签中未包含的文本。请建议我如何使用xpath或css选择器。

1 个答案:

答案 0 :(得分:0)

我通过检查包含 li类属性的子i元素的存在来找到fa-clock-o元素,然后直接获取子text()节点,然后使用.re_first()方法提取日期:

In [1]: response.xpath("//div[@class='grdcpnsmllnks']//li[i[contains(@class, 'fa-clock-o')]]/text()").re_first(r"Valid till\s+(\d+/\d+/\d+)")
Out[1]: u'31/12/2016'