''' #对 html文本进行处理 获得一个_Element对象 dom = etree.HTML(html) #获取 a标签下的文本 a_text = dom.xpath('//div/div/div/div/div/a/text()') print(a_text)

打印结果

python爬虫系列之xpath是什么

熟悉 html的朋友都知道在 html中所有的标签都是节点。一个 html文档是一个文档节点,一个文档节点包含一个节点树,也叫做 dom树。

节点树中的节点彼此拥有层级关系。

父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

在节点树中,顶端节点被称为根(root)

每个节点都有父节点、除了根(它没有父节点)

一个节点可拥有任意数量的子

同胞是拥有相同父节点的节点

另外,我们把距离某个节点最近的子节点叫做它的直接子节点,如下图所示的 body和 head就是 html的直接子节点。

python爬虫系列之xpath是什么

了解了 html结构之后我们再来看 xpath的使用。

首先,我们通过 etree.HTML( )来生成一个_Element对象,etree.HTML() 会将传入的文本处理成一个 html文档节点。这样就能保证我们总是能获得一个包含文档节点的_Element对象。

xpath语法

a / b :‘/’在 xpath里表示层级关系,左边的 a是父节点,右边的 b是子节点,这里的 b是 a的直接子节点

a // b:两个 / 表示选择所有 a节点下的 b节点(可以是直接子节点,也可以不是),在上面的例子中我们要选择 a标签是这样写的

a_text = dom.xpath('//div/div/div/div/div/a/text()')
#用 //
a_text = dom.xpath('//div//a/text()')
#如果 div标签下有两个 a标签,那么这两个 a标签都会被选择(注意两个 a标签并不一定是兄弟节点)
#比如下面的例子中的两个 a标签都会被选择 因为这两个 a标签都是 div的子节点
       '''
                
                    
                        
                           
                                    点击我
                            
                            
                                
                                    点击我
                                
                            
                        
                    
                
            '''

[@]:选择具有某个属性的节点

//div[@classs], //a[@x]:选择具有 class属性的 div节点、选择具有 x属性的 a节点

//div[@class="container"]:选择具有 class属性的值为 container的 div节点

//a[contains(text(), "点")]:选择文本内容里含有 “点” 的 a标签,比如上面例子中的两个 a标签

//a[contains(@id, "abc")]:选择 id属性里有 abc的 a标签,如

//a[contains(@y, "x")]:选择有 y属性且 y属性包含 x值的 a标签

#这两条 xpath规则都可以选取到例子中的两个 a标签
path = '//a[contains(@href, "#123")]'
path = '//a[contains(@href, "#1233")]'

总结

使用 xpath之前必须先对 html文档进行处理

html dom树中所有的对象都是节点,包括文本,所以 text()其实就是获取某个标签下的文本节点

通过_Element对象的 xpath方法来使用 xpath

注意!!!_Element.xpath( path) 总是返回一个列表

以上是“python爬虫系列之xpath是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


网页题目:python爬虫系列之xpath是什么
网站路径:http://wjwzjz.com/article/jgspsd.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP