【第九周 第 2 节】:页面解析

第九周-第二节课

css-selector

尽量避免解析路径中包含位置信息

chrome页面中内置了Jquery环境, 用$符号来表示

  • 直接定位元素

    • 通过id进行定位

      $("#id值")
      
    • 通过class进行定位

      $(".class值")
      
    • 通过属性名进行定位

      $("标签名[属性名='属性值']")
      
      $("ul[class='gl-warp clearfix']")
      
  • 获取兄弟节点

    • 获取当前节点的下一个节点

      • dom提供的接口, 不属于css-selector语法

        tmp = $("li[data-sku='6039832']")[0]
        tmp.nextElementSibling
        
      • 通过css-selector(不建议)

        $("ul[class='gl-warp clearfix'] li:first-child + li")
        
    • 获取当前节点的上一个节点

      • dom提供的接口, 不属于css-selector语法

        tmp = $("li[data-sku='2136538']")[0]
        tmp.previousElementSibling
        
  • 获取父子节点

    • 获取父节点

      • dom提供的接口, 不属于css-selector语法

        tmp.parentElement
        
    • 获取子节点

      • 获取所有子节点

        • 遍历所有符合条件的元素

          $("ul[class='gl-warp clearfix'] div[class='gl-i-wrap']")
          
        • dom提供的接口, 不属于css-selector语法

          $("ul[class='gl-warp clearfix']")[0].children
          
      • 获取第一个子节点

        :fist-child
        $("ul[class='gl-warp clearfix'] li:first-child")[0]
        
      • 获取最后一个子节点

        :last-child
        $("ul[class='gl-warp clearfix'] li:last-child")[0]
        
      • 获取第N个子节点

        :nth-child(索引)
        $("ul[class='gl-warp clearfix'] li:nth-child(5)")[0]
        
  • 模糊匹配

    • 匹配开头

      ^

      # 匹配data-sku属性值为2开头的元素
      $("li[data-sku^='2']")
      
    • 匹配结尾

      $

      $("li[data-sku$='2']")
      
    • 匹配子集

      *

      $("li[data-sku*='2']")
      
  • 获取文本值

    $("li[data-sku='6039832'] div[class='p-name p-name-type-2'] em")[0].innerText
    
  • 获取属性值

    $("ul[class='gl-warp clearfix'] li")[0].getAttribute("data-sku")
    

BeautifulSoup

  • 安装

    pip install bs4
    pip install lxml
    
  • 使用BeautifulSoup

    from bs4 import BeautifulSoup
    
    
    def jd_search_parse(html):
        soup = BeautifulSoup(html, "lxml")
        item = soup.select("li[data-sku='6039832']")[0]
    
  • 直接定位元素

  • 去除空白字符

    html = html.replace('\r\n', "").replace("\n", "").replace("\t", "")
    
  • 获取兄弟节点

    • 获取上一个节点

      tmp_ele.previous_sibling
      
    • 获取下一个节点

      tmp_ele.next_sibling
      
  • 获取父子节点

    • 获取父节点

      tmp_ele.parent
      
    • 获取子节点

      tmp_ele.children
      
  • 模糊匹配

  • 获取文本值

    content = tmp_ele.text.strip()
    
  • 获取属性值

    value = tmp_ele.attrs["data-sku"]
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值