本篇文章给大家分享的是有关怎么在Python中使用xpath解析HTML,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
Python有哪些常用库
Python常用的库:1. requesuts; 2. scrapy; 3.枕头;4.扭曲;5. numpy; 6. matplotlib; 7. pygama; 8. ipyhton等。
HTML文档:,
& lt; html> ,& lt; body> & lt;才能form> ,,& lt; div id=& # 39; leftmenu& # 39;比; ,,,& lt; h4> text ,,,& lt; ul id=& # 39;中国# 39;祝辞& lt; !——, first 位置——比; ,,,,& lt; li>……& lt;/li> ,,,,& lt; li>……& lt;/li> ,,,,,…… ,,,& lt;/ul> ,,,& lt; ul id=& # 39;英格兰# 39;祝辞& lt; !——, second 位置——比; ,,,,& lt; li>……& lt;/li> ,,,,& lt; li>……& lt;/li> ,,,,,…… ,,,& lt;/ul> ,,& lt;/div> & lt;才能/form> ,& lt;/body> & lt;/html>
直接使用lxml处理:
, import 编解码器 ,得到lxml import  etree ,f=codecs.open (“ceshi.html",“r",“utf-8") ,内容=f.read () ,f.close () ,树=etree.HTML(内容)
etree提供了HTML这个解析函数,现在我们可以直接对HTML使用xpath了,是不是有点小激动,现在就尝试下吧。
在使用xpath之前我们先来看看作为对照的jQuery和再保险。
在jQuery里要处理这种东西就很简单,特别是假如那个ul节点有id的话(比如是& lt; ul id=& # 39;中国# 39;祝辞):
(“# china") . each美元(函数(){…});
具体到此处是:
代码如下:
$ (“# leftmenu")定格(“h4:包含(& # 39;文本# 39;)“). next (“ul") . each(函数(){…});
找到id为leftmenu的节点,在其下找到一个内容包含为“文本”的h4节点,再取其接下来的一个ul节点。
在python里要是用再保险来处理就略麻烦一些:
block_pattern=re.compile (u" & lt; h4>档案& lt;/h4> (. * ?) & lt; h4>“,, re.I |, re.S) m=block_pattern.findall(内容) item_pattern=re.compile (u" & lt; li> (. * ?) & lt;/li>“,, re.I |, re.S) 项=item_pattern.findall (m [0]) for 小姐:拷贝项目: print 才能;我
那么用xpath要怎么做呢?其实跟jQuery是差不多的:
=tree.xpath节点(“/后代::ul [@ id=& # 39;中国# 39;]“)
当然,现在没有id的话也就只能用类似于jQuery的方法了。完整的xpath应该是这样写的(注意,原文件中的标签有大小写的情况,但是在xpath里只能用小写):
代码如下:
节点=tree.xpath (u"/html/身体/形式/div [@ id=& # 39; leftmenu& # 39;]/h4(文本()=& # 39;文本# 39;]/祖辈::ul [1]“)
更简单的方法就是像jQuery那样直接根据id定位:
节点=tree.xpath (u"//div [@ id=& # 39; leftmenu& # 39;]/h4(文本()=& # 39;文本# 39;]/祖辈::ul [1]“)
这两种方法返回的结果中,节点[0]就是那个“文本”的h4节点后面紧跟的第一个ul节点,这样就可以列出后面所有的ul节点内容了。
如果ul节点下面还有其他的节点,我们要找到更深节点的内容,如下的循环就是把这些节点的文本内容列出:
节点=节点[0].xpath(“李/a") for n 拷贝节点: print 才能;n。文本
对比三种方法应该可以看出xpath和jQuery对于页面的解析都是基于XML的语义进行,而再保险则纯粹是基于普通text.RE对付简单的页面是没有问题,如果页面结构复杂度较高的时候(比如一堆的DIV来回嵌套之类),设计一个恰当的再保险模式可能会远比写一个xpath要复杂。特别是目前主流的基于CSS的页面设计方式,其中大部分关键节点都会有id——对于使用jQuery的页面来说则更是如此,这时xpath相比再保险就有了决定性的优势。
<强>,附录:基本xpath语法介绍,详细请参考xpath的官方文档强>
xpath基本上是用一种类似目录树的方法来描述在XML文档中的路径比。如用“/崩醋魑舷虏慵都涞姆指簟5谝桓觥?北硎疚牡档母诘?注意,不是指文档最外层节的标记点,而是指文档本身)。比如对于一个HTML文件来说,最外层的节点应该是“/HTML”。
同样的,“. .”和“。”分别被用来表示父节点和本节点。
xpath返回的不一定就是唯一的节点,而是符合条件的所有节点。比如在HTML文档里使用“/HTML/头/scrpt”就会把脑袋里的所有脚本节点都取出来。