from lxml import etree
# 实例化
tree = etree.HTML(open('./素材/豆瓣.html', 'r', encoding='UTF-8').read())
# print(tree)
# / 按照路径层级 一级一级往下找
a_list = tree.xpath('/html/body/div/div/div/a')
# 获取a标签里的文本
# a_list = tree.xpath('/html/body/div/div/div/a/text()')
# print(a_list)
# for a in a_list:
# print(a) #
# # print(a.text) # 获取标签中文本
# # 将节点对象转换为字符串
# print(etree.tostring(a, encoding='UTF-8').decode('UTF-8')) # 登录
# print(type(etree.tostring(a, encoding='UTF-8').decode('UTF-8'))) #
# // 不考虑位置
# 获取页面中的所有的a标签 无论在哪个位置
# a_list = tree.xpath('//a')
# print(a_list)
# for a in a_list:
# print(a.text) # 获取标签中文本
# 将节点对象转换为字符串
# print(etree.tostring(a, encoding='UTF-8').decode('UTF-8'))
# print(type(etree.tostring(a, encoding='UTF-8').decode('UTF-8')))
# /与//的组合使用
# 获取登陆和注册
# a_list = tree.xpath('/html/body/div/div/div[1]/a/text()')
# print(a_list)
# 获取当前路径 /html/body/div/div/div 里面的所有的a 无论位置
# a_list = tree.xpath('/html/body/div/div/div//a/text()')
# print(a_list)
# 匹配ul下的li里面的所有的文本
# li_list = tree.xpath('//ul/li//text()')
# print(li_list)
# 添加查找条件
# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li//text()')
# print(li_list)
# 查找标题
# title_list = tree.xpath('//div[@class="detail-frame"]/h2/a/text()')
# print(title_list)
# 位置查找
# 获取ul下的所有的直接子li
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li')
# 获取第一个li
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li[1]//text()')
# 获取第二个li
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li[2]//text()')
# 倒数第一个li
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li[last()]//text()')
# 倒数第二个
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li[last()-1]//text()')
# 获取前2个
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li[position()<3]//text()')
# 使用列表切片
# 获取第一个
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li')[0].xpath('.//text()')
# 获取最后一个
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li')[-1].xpath('.//text()')
# print(li)
# ./与.//
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li')[0]
# text = li.xpath('.//text()') # 根据上面li的节点对象向下继续匹配
# 等同于
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li[1]//text()')
# .代表从当前节点继续向下匹配
# ./ 就是上面/的意思 一层一层往下找
# .// 就是上面//的意思 无论当前想要查找的内容在当前节点的哪个位置 都进行获取
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li')[0]
# text = li.xpath('./div[@class="detail-frame"]/h2/a/text()') # 根据上面li的节点对象向下继续匹配
# print(text)
# 等同于
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li[1]/div[@class="detail-frame"]/h2/a/text()')
# print(li)
# li = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li')[0]
# 当前匹配和li节点没有关系 因为没有从当前节点往下继续匹配
# text = li.xpath('//div[@class="detail-frame"]/h2/a/text()')
# text = tree.xpath('//div[@class="detail-frame"]/h2/a/text()')
# print(text)
# 属性值获取
# @属性名
# 获取所有的图片
# img_list = tree.xpath('//img')
# 获取所有图片的src地址 也就是连接
# img_list = tree.xpath('//img/@src')
# print(img_list)
# 获取所有超链接的href属性值
# a_list = tree.xpath('//a/@href')
# print(a_list)
# 当前作为了解
# 查找标签具有当前整个属性的节点
# a_list = tree.xpath('//a[@class]')
# a_list = tree.xpath('//a[@id]')
# print(a_list)
# a_list = tree.xpath('//@id')
# print(a_list)
# * 一般我们自己不写 但是复制xpath的时候会见到
# 不管当前是什么标签 条件就是id为content的我就要
# //*[@id="content"]/div/div[2]/ul/li[1]/div/h2/a
# 逻辑运算
'''
'''
# and
# text = tree.xpath('//div[@class="a1" and @id="a2"]/text()')
# print(text)
# or
# text = tree.xpath('//div[@class="a1" or @id="a2"]/text()')
# print(text)
# | 代码中我们去用