beat365网址官网网站-365体育世界杯专用版-365体育注册送365

掌握XPath:安装配置、解析流程、语法和实战练习全攻略

掌握XPath:安装配置、解析流程、语法和实战练习全攻略

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

# 逻辑运算

'''

div1

div2

'''

# 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)

# | 代码中我们去用