【问题标题】:How to select ul's specific li child text using Scrapy's css or xpath selector?如何使用 Scrapy 的 css 或 xpath 选择器选择 ul 的特定 li 子文本?
【发布时间】:2017-04-29 21:19:11
【问题描述】:

下面是 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>

下面是我的代码sn-p:

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 日。我在首先选择所需的&lt;li&gt; 标签然后进一步选择不包含在任何标签内的文本时遇到问题。请建议我如何使用 xpath 或 css 选择器来做到这一点。

【问题讨论】:

    标签: jquery html css xpath css-selectors


    【解决方案1】:

    我会通过检查子i 元素的存在来定位li 元素,该元素包含 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'
    

    【讨论】:

    • 当我将上述命令与 .extract() 一起使用时,会出现属性错误:'unicode' object has no attribute 'extract()'
    • @AmanAgarwal 它已经被re_first() 提取了,无需额外调用extract()
    • 但即便如此,它也没有给出价值,而是给出了“无”。
    • @AmanAgarwal 好吧,我已经复制了您的 HTML 并通过 scrapy shell 运行它 - 对我有用。检查你是否真的有这个用 Scrapy 解析的输入 HTML。
    • def parse_item(self, response): title = response.css('.nw-merbrrdrdbx .nw-offrtxt a .ofr-descptxt::text').extract() description = response.css ('.nw-merbrrddbx .nw-offrtxt .merdl-descp span::text').extract() endDate = response.xpath("//div[@class='nw-merbrrdrdbx']//div[@class='grdcpnsmllnks']//li[i[contains(@class, 'fa-clock-o')]]/text()").re_first(r"有效期到\s+(\d+/\d+/\d+ )") 商家 = response.css('.visit a span::text').extract() imageUrl = response.css('.nw-merbrrdrdbx .ofrpctg img::attr(src)').extract()
    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2023-03-23
    • 2019-02-05
    • 2018-08-08
    • 1970-01-01
    相关资源
    最近更新 更多