XPath在python的爬虫学习中,起着举足轻重的地位,对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但XPath明显比re具有优势,在网页分析上使re退居二线。
XPath介绍:
是什么? 全称为XML Path Language 一种小型的查询语言
说道XPath是门语言,不得不说它所具备的优点:
1) 可在XML中查找信息
2) 支持HTML的查找
3) 通过元素和属性进行导航
python开发使用XPath条件:
由于XPath属于lxml库模块,所以首先要安装库lxml,具体的安装过程可以查看博客,包括easy_install 和 pip 的安装方法。
XPath的简单调用方法:
from lxml import etree selector=etree.HTML(源码) #将源码转化为能被XPath匹配的格式 selector.xpath(表达式) #返回为一列表
XPath的使用方法:
首先讲一下XPath的基本语法知识:
四种标签的使用方法
1) // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。
2) / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作
3) /text() 获取当前路径下的文本内容
4) /@xxxx 提取当前路径下标签的属性值
5) | 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签。
6) . 点 用来选取当前节点
7) .. 双点 选取当前节点的父节点
另外还有starts-with(@属性名称,属性字符相同部分),string(.)两种重要的特殊方法后面将重点讲。
利用实例讲解XPath的使用:
from lxml import etree html=""" <!DOCTYPE html> <html> <head lang="en"> <title>测试</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <div id="content"> <ul id="ul"> <li>NO.1</li> <li>NO.2</li> <li>NO.3</li> </ul> <ul id="ul2"> <li>one</li> <li>two</li> </ul> </div> <div id="url"> <a href="http:www.58.com" title="58">58</a> <a href="http:www.icnlogs.com" title="cnblog">cnblog</a> </div> </body> </html>
selector=etree.HTML(html) content=selector.xpath(‘//div[@id="content"]/ul[@id="ul"]/li/text()‘) #这里使用id属性来定位哪个div和ul被匹配 使用text()获取文本内容 for i in content: print i
#输出为
NO.1
NO.2
NO.3
con=selector.xpath(‘//a/@href‘) #这里使用//从全文中定位符合条件的a标签,使用“@标签属性”获取a便签的href属性值 for each in con: print each
#输出结果为:
http:www.58.com
http:www.csdn.net
con=selector.xpath(‘/html/body/div/a/@title‘) #使用绝对路径定位a标签的title con=selector.xpath(‘//a/@title‘) #使用相对路径定位 两者效果是一样的 print len(con) print con[0]con[1]
#输出结果为:
2
58
cnblog
时间: 2024-10-08 00:17:01