# -*- coding:utf-8 -*-
# lxml xpath会用到里边的tree
from lxml import etree
# parse()函数
# 用来解析本地的html文件
# 如果文件里有单标签,需加/做结束标志
# html源代码解析之后转换成一个ElementTree对象
html = etree.parse('index.html')
print(html)
# ElementTree 也可以转换为一个字符串
string = etree.tostring(html).decode('utf-8')
print(type(string))
# 找到a标签 通过标签名找到所有的标签
# 返回列表,列表中存放的是找到的Element标签对象
res = html.xpath('//a')
for ele in res:
# @属性名 查找标签的属性值
# text() 标签内的文本内容
href = ele.xpath('@href')[0]
text = ele.xpath('text()')[0]
print(href,text)
res = html.xpath('//a/@href')
# /text()获取当前标签的直接子文本
# //text()获取当前标签和子孙标签内的所有文本
res = html.xpath('//a//text()')
print(res)
# 获取指定位置的标签
# div[@属性名=属性值]/标签/标签/标签名[number]number指找到第几个
res = html.xpath('//div[@id="main"]/ul/li[3]')
print(res[0].xpath('text()'))
# 获取指定属性包含某个属性值得标签
# *可以表示任意标签名
# contains(@属性名,属性值) 找到某个属性包含某个属性值的标签
res = html.xpath('.//*[contains(@class,"s")]')
print(res)
# 直接找h1标签
res = html.xpath('//h1[@class="content s"]')
print(res)
res = html.xpath('//p[@class="top"]/h1[contains(@class,"s")]')
print(res)
# lxml xpath会用到里边的tree
from lxml import etree
# parse()函数
# 用来解析本地的html文件
# 如果文件里有单标签,需加/做结束标志
# html源代码解析之后转换成一个ElementTree对象
html = etree.parse('index.html')
print(html)
# ElementTree 也可以转换为一个字符串
string = etree.tostring(html).decode('utf-8')
print(type(string))
# 找到a标签 通过标签名找到所有的标签
# 返回列表,列表中存放的是找到的Element标签对象
res = html.xpath('//a')
for ele in res:
# @属性名 查找标签的属性值
# text() 标签内的文本内容
href = ele.xpath('@href')[0]
text = ele.xpath('text()')[0]
print(href,text)
res = html.xpath('//a/@href')
# /text()获取当前标签的直接子文本
# //text()获取当前标签和子孙标签内的所有文本
res = html.xpath('//a//text()')
print(res)
# 获取指定位置的标签
# div[@属性名=属性值]/标签/标签/标签名[number]number指找到第几个
res = html.xpath('//div[@id="main"]/ul/li[3]')
print(res[0].xpath('text()'))
# 获取指定属性包含某个属性值得标签
# *可以表示任意标签名
# contains(@属性名,属性值) 找到某个属性包含某个属性值的标签
res = html.xpath('.//*[contains(@class,"s")]')
print(res)
# 直接找h1标签
res = html.xpath('//h1[@class="content s"]')
print(res)
res = html.xpath('//p[@class="top"]/h1[contains(@class,"s")]')
print(res)