案例 1
from lxml import etree
1将字符串编译成element对象
etree.HTML方法,是将内容解析成html文档 tree = etree.HTML(text)
print(tree) #<Element html at
2将element对象变成字符串的方法
html_str = etree.tostring(tree,pretty_print=True).decode('utf-8)
print(type(html_str)# bytes 需要加.decode(‘utf-8’)element对象有xpath方法,可以用xpath方法进行查找元素
xpath方法返回都是一个list
ul = tree.xpath(’//div/ul’)[0]
print(ul)
选取属性
class_attr = ul.xpath(’//li[1]/@class’)
print(class_attr)
添加[0]后 [‘item-0’]
选取内容
选取class属性为item-1的li下面的a标签的内容
a_contents = tree.xpath(’//li[@class=“item-1”]/a/text()’) print(a_contents)
返回[‘second item’,‘fourth item’]
element对象xpath放来筛选,返回值都是list
xpath表达式最后一个是一个元素(标签),list中都是element元素
xpath表达式最后一个是属性,list都是属性字符串
xpath表达式最后一个是内容
案例 2 from lxml import etree
parse方法是按照xml的方式来解析,语法出问题,就会报错 html = etree.parse(‘demo.html’)
print(html) # 报错 少了个标签 成功 element对象
案例 1
HTML='''
html语法
'''
tree=etree.HTML(text)
所有的li标签
li_list=tree.xpath('//li')
获取li标签的所有class属性
li_class=tree.xpath('//li@class')
获取li标签下href为link1.html的a标签
a=tree.xpath('//li/a[@href="link1.html"])
获取li标签下的所有span标签包括孙子span
spans=tree.xpath('//li//span')
获取li标签下a标签的所有class
a_class=tree.xpath('//li//a@class')
获取最后一个li的a标签的href属性
a_href=tree.xpath('//li[last()]/a/@href')
获取倒数第二个元素的内容
element_c=tree.xpath('//*[last()-1]/text()')
获取class值为bold的标签名
tagname=tree.xpath('//*[@class="bold"]')
print(tagname.tage) #标签元素.tag可以获取标签的内容
案例 2
html=
'''
html语法
'''
tree = etree.HTML(html)
# print(tree)
#(1)获取文档中的所有book节点的第一个book节点
first_book = tree.xpath('//bookstore/book[1]')
#(2)获取第一个book节点
first_book = first_book[0]
# print(first_book)
#(3)获取first_book当前节点下的href
href = first_book.xpath('.//@href')
# print(href)
#(4)获取当前节点的父节点下的book节点的href属性
hrefs = first_book.xpath('..//book/@href')
# print(hrefs)
#(5)获取价格小于40的书的书名
book_name = tree.xpath('//book[price<40]/title/text()')
# print(book_name)
#(6)获取价格等于99.95的书的书名
book_name = tree.xpath('//book[price=99.95]/title/text()')
# print(book_name)
#(7)获取book标签下面的title和price标签
result = tree.xpath('//book/title|//book/price')
# print(result)
#(8)获取属性href含有baidu字符串的book标签,获取此标签的书名
book_name = tree.xpath('//book[contains(@href,"baidu")]/title/text()')
# print(book_name)
#(9)获取前面两个属于bookstore标签的字标签的book标签,获取此标签的书名
book_names = tree.xpath('//bookstore/book[position()<3]/title/text()')
# print(book_names)
#(10)匹配任何属性节点
tags = tree.xpath('//*[@*]')
print(len(tags))
#(11)获取所有带有属性title标签,获取此标签的内容
name = tree.xpath('//title[@*]/text()')
# print(name)