xpath

xpath

    xml,是一种数据格式,和json的位置一样,前后端交互,传输数据使用的格式
    xml和html的不同:
    (1)xml是用来传输和存储数据的,html是用来显示数据的
    (2)xml标签可以自定义,html是官方规定好的标签
    (3)xml都是纯文本,而html是超文本
    xml语法:
    (1)必须有关闭标签
    (2)标签名对大小写敏感
    (3)属性值必须加双引号
    xpath:是用来解析xml数据的,和html有啥关系呢?
    html和xml都是标记语言,有人搞了一套库,叫做lxml,实现的功能就是用xpath的语法来解析html数据
    
    xpath语法:
    	//		从任意位置开始查找
    	.		从当前节点开始查找
    	..		从上一级节点开始查找
    	@		用来筛选属性的
    常见的路径表达式:
    	bookstore/book 		从bookstore下面查找book,book是直接子节点
    	bookstore//book     从bookstore下面查找所有的book,直接子节点子孙节点都行
    	//book 				从整个文档中查找所有book
    	//@lang				查找所有的有lang属性节点
    	bookstore/book[1]   取出第一个直接子节点book 
    		【注】下标从1开始
    	bookstore/book[last()] 取出最后一个直接子节点book
    	bookstore/book[last()-1]  取出倒数第二个直接子节点book
    	bookstore/book[position()<3] 取出前两个直接子节点book
    	//title[@lang='eng']    选取所有lang属性值为eng的title节点   
    	bookstore/*          bookstore下面所有直接子节点
    	//*                  查找所有节点
    	//title[@*]			 查找有属性的title节点
    两个函数
    	starts-with   contains

xpath在html中的应用

    (1)属性筛选
    	//input[@id='kw']
    	如果属性值多,需要全部复制进去
    	//div[@class="s_form_wrapper soutu-env-nomac soutu-env-index"]
    (2)层级和索引筛选
    	//div[@id="u1"]/a[3]
    (3)取属性和取文本
    	属性://div[@id="u1"]/a[4]/@href
    	文本内容://div[@id="u1"]/a[4]/text()
    (4)函数
    	starts-with
    		属性以某某开头: //div[@id="u1"]/a[starts-with(@class,'m')]
    		文本以某某开头: //div[@id="u1"]/a[starts-with(text(),'地')]
    	contains
    		属性包含某某://div[@id="u1"]/a[contains(@href,'123')]
    		文本包含某某://div[@id="u1"]/a[contains(text(),'闻')]

代码中使用

    from lxml import etree
    	过程:首先根据etree里面的方法将html格式的字符串搞成一个对象  tree,然后就可以使用tree里面的方法xpath。
        本地文件:etree.parse('文件名')
        网络文件: etree.HTML('网页字符串')
        xpath方法返回的是列表,需要通过下标进行提取
        如果标签里面还有子标签,获取使用方式:
            ret = tree.xpath('//div[@class="star"]//text()')
            然后手动拼接列表即可
            ret = tree.xpath('//div[@class="star"]')[0].xpath('string(.)')
    	直接得到标签里面所有的内容

    import requests
    from lxml import etree
    
    
    # 生成tree对象
    url = ''
    headers = {
    	'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
    }
    
    r = requests.get(url=url, headers=headers)
    tree = etree.HTML(r.text)
    views = tree.xpath('//input[@id="__VIEWSTATE"]/@value')[0]
    viewg = tree.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value')[0]

你可能感兴趣的:(python)