在爬虫学习里, 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的长度。

print

#输出结果为:

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
  • up
    • down
    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路径复制到了剪切板。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐