xpath的学习以及语法

1、发送请求
2、响应的解析
3、爬数据、保存数据


xpath
bs4
re(正则表达式)


xpath是在xml和html文档中找到信息的语言,可用在xml和html文档对元素和属性进行遍历
按照一定的规则进行数据的获取


用css选择web元素麻烦,xpath非常简单
**

绝对路径的选择

自动化程序使用的是xpath来选择web元素,

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

相对路径的选择

无论在哪里都能够找得到
要选择 所有的 div 元素里面的 所有的 p 元素 ,不管div 在什么位置,也不管p元素在div下面的什么位置,则可以这样写 //div//p

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

如果要用css,那么代码就是下面的

elements = driver.find_elements_by_css_selector("div p")

xpath方法中div的直接子节点,就是

//div/p

css选择器的话,

div>p

通配符

如果想要选择div节点中的所有的直接子节点,可以使用

//div/*

,*是一个通配符,
对应css

  div> *

根据属性选择

[@属性名=‘属性值’]
根据id
//[@id=‘west’]
根据class
//select[@class=‘capital huge-city’]
根据其他的属性
//[multiple]
属性包含字符串
要选择 style属性值 包含 color 字符串的 页面元素 ,可以这样 //
[contains(@style,’color’)]
要选择 style属性值 以 color 字符串 开头 的 页面元素 ,可以这样 //[starts-with(@style,’color’)]
要选择 style属性值 以 某个 字符串 结尾 的 页面元素 ,大家可以推测是 //
[ends-with(@style,’color’)], 但是,很遗憾,这是xpath 2.0 的语法 ,目前浏览器都不支持
按照次序
//div/p[2]
可以选择父元素为div中的p类型第二个子元素
第几个子元素
//div/[2]
某类型倒数第几个子元素
//p[last()]
//p[last()-1]
//div/p[last()-2]
范围的选择
//option[position()<2]
选择class属性为multi_choice的前3个子元素
//
[@class=‘multi_choice’]/[position()<=3]
选择class属性为multi_choice的后3个子元素
//
[@class=‘multi_choice’]/*[position()>last()-2]
为什么不是 last()-3 呢? 因为

last() 本身代表最后一个元素
last()-1 本身代表倒数第2个元素
last()-2 本身代表倒数第3个元素
组选择、父节点、兄弟节点
xpath也有组选择, 是用 竖线 隔开多个表达式, 比如,要选所有的option元素 和所有的 h4 元素,可以使用
//option | //h4 等同于CSS选择器 option , h4

//[@class=‘single_choice’] | //[@class=‘multi_choice’] 等同于CSS选择器 .single_choice , .multi_choice

选择父节点
xpath可以选择父节点, 这是css做不到的。某个元素的父节点用 /… 表示, 比如,要选择 id 为 china 的节点的父节点,可以这样写 //[@id=‘china’]/… 。
当某个元素没有特征可以直接选择,但是它有子节点有特征, 就可以采用这种方法,先选择子节点,再指定父节点。
还可以继续找上层父节点,比如 //
[@id=‘china’]/…/…/…
兄弟节点选择
前面学过 css选择器,要选择某个节点的后续兄弟节点,用 波浪线, xpath也可以选择 后续 兄弟节点,用这样的语法 following-sibling::
比如,要选择 class 为 single_choice 的元素的所有后续兄弟节点 //[@class=’single_choice’]/following-sibling::, 等同于CSS选择器 .single_choice ~ *
如果,要选择后续节点中的div节点, 就应该这样写 //*[@class=‘single_choice’]/following-sibling::div
xpath还可以选择 前面的 兄弟节点,用这样的语法 preceding-sibling::
比如,要选择 class 为 single_choice 的元素的所有前面的兄弟节点 //[@class=’single_choice’]/preceding-sibling::
而CSS选择器目前还没有方法选择前面的 兄弟节点
要了解更多Xpath选择语法,可以点击这里,打开Xpath选择器参考手册: http://www.w3school.com.cn/xpath/index.asp

你可能感兴趣的:(学习,javascript,前端)