Python爬虫学啥强?xpath对比正则,优势尽显,速看
在爬虫学习里, XPath所处地位相当关键, 举足轻重, 将以对比正则表达式re来说, 它们两者能够达成相同的工作, 实现的功能也近乎一样, 然而, XPath相较于re显著具有优势, 这致使在网页分析方面re退居次要位置。
XPath介绍:
是什么? 全称为XML Path 一种小型的查询语言
说道XPath是门语言,不得不说它所具备的优点:
1) 可在XML中查找信息
2) 支持HTML的查找
3) 通过元素和属性进行导航
开发使用XPath条件:
因为XPath是属于lxml库这一模块的缘故, 所以首要的事情是要去安装lxml库, 关于具体的安装过程能够查看博客, 其中包容了某种特定的方式以及pip这种方式的安装过程呢。
XPath的简单调用方法:
from lxml etree
等于, 使用 etree.HTML, 把源码转化, 转化为那种, 能被 XPath 匹配的格式。
.xpath(表达式) #返回为一列表
XPath的使用方法:
首先讲一下XPath的基本语法知识:
四种标签的使用方法
1) 按照双斜杠定位根节点的方式, 会针对全文展开扫描, 于文档里挑选出所有合乎条件的内容, 最后以列表的形式予以返回。www.goulu.info
2) 搜寻当下标签路径的下一层路径标签, 或者针对当前路标签内容予以操作, 是单斜杠所具备的功能 , /。
3) /text() 获取当前路径下的文本内容
4) /@xxxx 提取当前路径下标签的属性值
5) | 可选符运用, | 能够挑选若干个路径呢, | 就像//p | //div这样, | 也就是在当下路径的情况里, | 去选取所有符合相应条件的p标签以及div标签。
6) . 点 用来选取当前节点
7) .. 双点 选取当前节点的父节点
还有另外一种情况, 就是-with(@属性名称, 属性字符相同的部分), 以及(.), 这两种属于重要的特殊方法, 后面将会重点来讲。
利用实例讲解XPath的使用:
from lxml etree
html="""
"""
=etree.HTML(html)
=.xpath('//div
@id=""
这里, 运用id属性, 去定位哪一个div以及ul会被匹配, 接着, 使用text()来获取文本内容。
for i in :
print i
#输出为
NO.1
NO.2
NO.3
con 等于通过 xpath 方法选取, 其路径为 '//a/@href', 在此处是运用 // 在全文范围里面去定位符合相应条件的 a 标签, 接着利用“@标签属性”这种方式来获取 a 标签的 href 属性值。
for each in con:
print each
#输出结果为:
http:
http:
把con赋值为通过xpath('/html/body/div/a/@title')获取到的内容, 这里使用的是绝对路径, 然后获取con的长度。
#输出结果为:
58 CSDN
介绍XPath的特殊用法:
1) -with 解决标签属性值以相同字符串开头的情况
举例说明
from lxml import etree
html="""
aa
ab
ac
""" selector=etree.HTML(html) content=selector.xpath('//div[starts-with(@id,"a")]/text()') #这里使用starts-with方法提取div的id标签属性值开头为a的div标签 for each in content: print each #输出结果为: aa ab ac
2) (.) 标签套标签
html="""
left right
updown
east west
""" #下面是没有用string方法的输出 sel=etree.HTML(html)GoUlU.InFo con=sel.xpath('//div[@id="a"]/text()') for i in con: print i #输出内容为left west data=sel.xpath('//div[@id="a"]')[0] info=data.xpath('string(.)') content=info.replace('\n','').replace(' ','') for i in content: print i #输出为 全部内容
XPath提供的几个特殊的方法:
在XPath里, 要是所要取的标签不存在属性, 那么能够运用text(), 通过()去识别该标签。
举两个简单的例子:
from lxml import etree
html="""
hello
H
hehe
""" sel=etree.HTML(html) con=sel.xpath('//div[text()="hello"]/p/text()') print con[0] #H
这里使用text()的方法来判别是哪个div标签
from lxml import etree
html="""
hello
H
J
I
hehe
""" sel=etree.HTML(html) con=sel.xpath('//div[text()="hello"]/p[posision()=2]/text()') print con[0] #J
另外,在XPath中可以使用多重过滤方法寻找标签,例如ul
@id=”a”
这里使用【3】来寻找第三个ul标签 并且它的id属性值为a
获取XPath的方式有两种:
1) 采用诸如上述的众多方法, 借助观察去探寻规律的途径, 以此来得到XPath。
2) 利用浏览器去获取, 于网页里进行右击操作, 接着选择审查元素, 或者借助F12来打开, 如此便能在其中查看网页的html标签, 寻找到你想要获取XPath的那个标签, 随后再次进行右击操作, 再选择Copy XPath, 这样就已然把XPath路径复制到了剪切板。
更多推荐
所有评论(0)