爬虫大法之xpath详解

747 阅读2分钟

这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战

Selenium找元素的方法有id,classname,tag,xpath,选择器。其实使用哪个无所谓,只要你能熟练地找到元素就行了。

这里面还需要再说一个方法,那就是xpath。无论你是否用到Selenium,当你认真地学爬虫的话,xpath也是经常遇到的。

首先我们知道xpath是什么?它有什么用?XPath (XML Path Language) 是由国际标准化组织W3C指定的,用来在 XML 和 HTML 文档中选择节点的语言。目前主流浏览器 (chrome、firefox,edge,safari) 都支持XPath语法

绝对路径

绝对路径就是具有确定性的,从根节点开始写的路径。这里我们的根节点是/html,我们从/html开始写一直写到某个具体的元素。一般来说绝对路径都是比较长的。 例如我们可以这样子:

elements = driver.find_elements_by_xpath("/html/body/div/")

上面的xpath是连贯起来的,具体确定性,所以他是绝对路径。

再一次以百度为例

image.png

上面的完整xpath是:

/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input

相对路径

与绝对路径相对的,我们还有相对路径。相对路径并不是从根节点开始写的。一般开头就是一个双斜杠//。 例如:

//div//a

有的同学说,相对路径这么短?对,它就这短,所以他很有可能会匹配到很多个,所以我们需要注意了。看匹配出来的元素是否就是我们需要的,不然用的时候有可能会报错。

我们完整的匹配代码就是:

elements = driver.find_elements_by_xpath("//div//p")

这样子就可以匹配到一堆符合条件的了。

通配符

这里的通配符就是任意字符的意思,用*代替。

如果要选择所有div节点的所有直接子节点,可以使用表达式 //div/*

elements = driver.find_elements_by_xpath("//div/*")

上面的代码就可以匹配到全部div下面的全部子节点。

关于爬虫和自动化测试,有兴趣学的话,可以关注公众号:诗一样的代码,留言给我,我教你系统地学。