#coding:utf-8 #__author__='wang' #lxml第三方的HTML解析库在对HTML进行解析的时候,使用的xpatn语法,xpath是通过 路径的形式在HTML中选择节点 #etree:element etree元素树,元素指的就是HTML中的标签 from lxml import etree #加载本地HTML文件 #html是一个ElementTree类型的对象 html = etree.parse('index.html') # print type(html) # print html #tostring()是将一个ElementTree类型的对象转换成一个HTML字符串,pretty_print 美化输出 # result = etree.tostring(html,pretty_print=True) # print type(result) # print result #fromstring()是将一段字符串转换成一个Element对象 # html = """ # <a href='http://www.zhihu.com'>知乎</a> # """ # result = etree.fromstring(html) # print type(result) # print result #如何从本地HTML中提取标签及标签内容 #1.//a:表示从当前文档中搜索a标签而不考虑a标签的位置 # a = html.xpath('//a') # print a #2.获取a标签的class属性、href属性值,获取属性时一定要使用@ # result = html.xpath('//a/@class') # result = html.xpath('//a/@id') # result = html.xpath('//a/@href') # print result #3./text():只获取标签文本内容,子标签的文本内容无法获取 # result = html.xpath('//a/text()') # result = html.xpath('//p/text()') # result = html.xpath('//div/text()') #//text():可以将该标签以及该标签所有子标签内的文本内容全部获取出来 # result = html.xpath('//div//text()') # for res in result: # print res #4.获取ul标签内的li标签内的a标签,并且a标签的id是second_a的一个标签 #[@id="second_a"]:通过属性对要查找的标签进行限制 # result = html.xpath('//ul/li/a[@id="second_a"]/text()') # print result[0] #5.last():获取ul标签下的最后一个li标签 # result = html.xpath('//ul/li[last()]')[0] #在li这个Element对象的基础上继续使用xpath进行下一步的元素定位 # result = result.xpath('a[@class="first_a"]/text()') # print result # # result = html.xpath('//ul/li[2]')[0] # # result = result.xpath('a[@href]')[0] # print result #contains(@class,"first"):查找class属性值中包含first值的标签,一般用在class 属性值比较多的时候 result = html.xpath('//div[@class="one"]/p[contains(@class,"first")] /text()')[0] print result #除了有contains函数,还有class属性以xx开头的判断函数,以xx结尾的判断函数 #如果解析的是一段HTML源码字符串 html_string = """ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"/> <title>lxml中xpath的用法</title> </head> <body> <ul> <li><a href="http://www.baidu.com" class="first_a">百度一下 </a></li> <li><a href="http://mail.qq.com" id="second_a">QQ邮箱</a></li> <li><a href="http://www.taobao.com" class="first_a">淘宝网</a> </li> <li><a href="http://pypi.python.com" class="second_a">Python </a></li> </ul> <p class="one">first_p_tag</p> <p id="second">second_p_tag</p> <div class="one"> first_p_tag <p class="first second third">1111</p> <a href="#">2222</a> </div> </body> </html> """ # html_object = etree.HTML(html_string) # print type(html_object) # print html_object # # result = html_object.xpath('//div/a/text()') # print result[0] #/xpath路径语法中的/,一个斜杠的含义只能查询下一级的直接子节点,而子节点的子节点 是无法获取的 #xpath路径中的//,含义就是可以查询路径中的子孙节点 # result = html_object.xpath('//ul//a/text()') # print result[0]
lxml中xpath语法的使用
最新推荐文章于 2023-04-06 22:23:04 发布