XPath 是一种查询语言,用于在HTML/XML文档中定位和提取一些片段。XPath也是一个W3C标准。XPath只能处理DOM,所以必须先将HTML或XML文档加载解析成DOM。在Python中可以用lxml保的etree来 执行DOM解析和XPath查询。
1. 示例文件
Collected R wisdoms
Robert Gentleman
'What we have is nice, but we need something very different'
Source: Statistical Computing 2003, Reisensburg
Rolf Turner
'R is wonderful, but it cannot work magic'
answering a request for automatic generation of 'data from a known mean and 95% CI'
Source: R-help
The book homepage
3. xpath路径
对于HTML文档 ,可以用到达该节点的顺序来描述它的位置,如示例文件中元素,它的XPath为"/html/body/div/p/i",提取该文档节点数据,这个是绝对路径,可以匹配到两条数据;另外可以使用相对路径,如"//i" 这样可以匹配到三条数据,//表示可以从某个路径开始,这条相对路径效率比较低,会导致对文档树进行完全遍历。python代码如下:
f = open("fortunes.html", "r")
content = f.read()
f.close()
html = et.HTML(content)
elements = html.xpath('/html/body/div/p/i')
for ele in elements:
print ele.text
print ""
elements = html.xpath('//i')
for ele in elements:
print ele.text
利用这个特性构建XPath的语法为:node1/relation::node2,同样上述html文档,用这个语句就可以构造一个XPath来提取第2个
语句为: //a/acenstor::div//i 表示这条路径中的i是一个div后代,同时这个div又是一个a的祖先,从文档树的结构看,只有第2个div具备这个特性。
XPath 轴用来表示的节点与上下文节点之间的关系,如图所示。
4. XPath谓语
谓语是能针对节点的名字、值或属性进行调用的简单函数,这些函数会对某个条件 (或一组条件)是true还是false进行判断。结果为true的那些节点会被选中。
XPath谓语的语法:node[predicate]
数字谓语,利用文档中的数字属性,如计数或位置,创建条件语句,如:'//div/p[position()=1]’ 返回第一个位置的
文本谓语,根据文档中元素的名字、内容、属性或属性值中的文本选取节点,如 '//div[@date="october/2011]"'
5. 提取节点元素
在python中用lxml可以方便的获得元素的标签名、内容t和属性,分别对应的是lxml.etree._Element类的tag、text属性和items()方法。
if __name__ == '__main__':
f = open("fortunes.html", "r")
content = f.read()
f.close()
html = et.HTML(content)
elements = html.xpath('//')
for ele in elements:
print type(ele)
print ele.tag
print ele.items()
此外,关于正则表达式、http、sql和ajax的相关知识就跳过,这些以前都接触过。