美文网首页
xPath语法

xPath语法

作者: haokeed | 来源:发表于2019-05-12 15:37 被阅读0次
    # 一种在xml文档中导航和选择元素查询语言
    # 教程 http://www.w3school.com.cn/xpath/xpath_syntax.asp
    # lxml 一种python的xpath解析库
    # 安装 pip install lxml
    # 最常用的语法
    # nodename  选取此节点的所有子节点。
    # / 从根节点选取。
    # //    从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
    # . 选取当前节点。
    # ..    选取当前节点的父节点。
    # @ 选取属性。
    
    text='''
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <bookstore>
    
    <book>
      <title lang="eng">Harry Potter</title>
      <price>29.99</price>
    </book>
    
    <book>
      <title lang="eng" lang2="eng">Learning XML</title>
      <price>39.95</price>
    </book>
    
    </bookstore>
    '''
    
    from lxml import etree
    root=etree.HTML(text) # 会加上html和body
    
    root.xpath("//.")
    
    # 选择bookstore节点
    # 从根节点出发
    root.xpath('/html/body/bookstore')
    
    # 从bookstore节点出发
    root.xpath("//bookstore")
    
    # 获取book标签 从bookstore节点出发
    root.xpath("//bookstore/book")
    
    # 获取标签的属性
    root.xpath("//book/title/@lang")
    
    root.xpath("//title/@lang")
    
    # 通过text()获取文本信息
    root.xpath("//bookstore/book/title/text()")
    
    # 获取一个标签下的title中的文本信息
    root.xpath("//bookstore/book[1]/title/text()") # book[last()] 最后一个  book[last()-1] 倒数第二个
    
    root.xpath("//title[@lang='eng']/text()") # 获取title中lang属性=eng的标签的文本内容
    
    # 多属性条件筛选 or and 
    root.xpath("//title[@lang='eng' and @lang2='eng']/text()") # 获取title中lang属性=eng 且 lang2=eng 标签的文本内容
    
    image.png
    image.png
    image.png
    image.png

    例子

    # 例子
    import requests
    from lxml import etree
    
    # 获取xml数据
    url="https://search.51job.com/list/010000,000000,0000,00,9,99,Java%2520%25E5%25BC%2580%25E5%258F%2591,2,1.html"
    res=requests.get(url)
    res.encoding='gbk'
    
    # 装载内容为xpath
    root=etree.HTML(res.text)
    
    # 利用xpath提取网页信息
    # 获取职位名称
    position=root.xpath("//p[contains(@class,'t1')]/span/a/@title") # 这里表示class中含有t1就可以
    print(position)
    print(len(position))
    
    # 去除字符串两边的空格和换行符
    position=root.xpath("//p[contains(@class,'t1')]/span/a/text()") # 这里表示class中含有t1就可以
    for i in range(len(position)):
        position[i]=position[i].strip() # strip去除两边 lstrip去除左边 rstrip去除右边
    print(position)
    print(len(position))
    
    # 公司处理
    company=root.xpath("//span[@class='t2']/a/@title")
    print(company)
    print(len(company))
    
    # 地点
    addrs=root.xpath("//div[@class='el']/span[@class='t3']/text()")
    print(addrs)
    print(len(addrs))
    
    # 工资
    salary=root.xpath("//div[@class='el']/span[@class='t4']/text()")
    print(salary)
    print(len(salary))
    
    # 形成表格
    from pandas import DataFrame
    
    jobinfo=DataFrame([position,company,addrs,salary]).T
    jobinfo.columns=["职位名","公司名","地点","工资"]
    jobinfo
    
    image.png
    image.png
    image.png
    image.png

    相关文章

      网友评论

          本文标题:xPath语法

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