美文网首页
Scrapy中xpath的使用

Scrapy中xpath的使用

作者: 念念咚咚锵 | 来源:发表于2018-03-22 19:59 被阅读0次

    对html的结构可以设想为一棵大树,根节点是html,然后开始分叉为head,body,其中每个节点上有自己属性特点。对于xpath使用的总结比较多,我也是东抄一下西抄一下提供大的方向

    child::book 选取所有属于当前节点的子元素的 book 节点。
    attribute::lang 选取当前节点的 lang 属性。
    child::* 选取当前节点的所有子元素。
    attribute::* 选取当前节点的所有属性。
    child::text() 选取当前节点的所有文本子节点。
    child::node() 选取当前节点的所有子节点。
    descendant::book 选取当前节点的所有 book 后代。
    ancestor::book 选择当前节点的所有 book 先辈。
    ancestor-or-self::book 选取当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点)
    child::*/child::price 选取当前节点的所有 price 孙节点。

    通过绝对路径或者相对路径进行定位

    response.xpath('html/body/div/input')
    

    通过索引来进行定位

    response.xpath('//input[3]')
    

    通过属性来定位

    response.xpath("//input[@id='kw1' and @name='wahah']")
    

    使用内置方法来定位

    # 方法比较多 参见内置方法的链接
    response.xpath("//input[start-with(@id,'nice')]")
    response.xpath("//input[ends-with(@id,'fds')]")
    response.xpath("//input[contains(@id,'haha')]")
    response.xpath("//input[not(@)]")
    

    当然获取了selector对象,你可以接着使用xpath对象来定位元素,记得前面使用'./'

    为了提取真实的原文数据,你需要调用 .extract()

    # 正则方法re返回的是unicode列表,无法继续使用selector特性
    response.xpath("//input[not(@)]").re(r'.*')
    response.xpath("//input[not(@)]").extract()
    

    链接:
    内置方法 http://www.w3school.com.cn/xpath/xpath_functions.asp#qname

    相关文章

      网友评论

          本文标题:Scrapy中xpath的使用

          本文链接:https://www.haomeiwen.com/subject/xbkzqftx.html