爬虫之XPath语法

爬虫之XPath语法

1、简介

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

2、XPath节点
  • 七种基本节点
    • 元素、属性、文本
    • 命名空间、处理指令、注释以及根节点
  • 节点之间的关系
    • 父、子、同胞(兄弟)、先辈、后代
3、XPath语法
3.1 路径表达式
  • nodename 选取此节点的所有子节点
  • / 从根节点选取
  • // 从匹配的当前节点选择文档中的节点,而不考虑它们的位置。
  • . 选取当前节点
  • .. 选取当前节点的父节点
  • @ 选取属性
3.2 路径表达式例子
  • bookstore 选取bookstore元素的所有子节点
  • /bookstore 选取根元素bookstore
  • /bookstore/book 选取属于bookstore的子元素的所有book元素
  • //book 选取所有book元素,而不管它们在文档中的位置。
  • bookstore//book 选择属于bookstore元素的后代的所有book元素
  • //@lang 选取名为lang的所有属性
3.3 谓语
  • 嵌在[]中用来查找某个特定节点或包含某个指定值得节点。
  • /bookstore/book[1] 第一个book元素
  • /bookstore/book[last()] 最后一个book元素
  • /bookstore/book[position()<3] 选择前2个
  • //title[@lang] 选择所拥有有名为lang的属性的title元素
  • /bookstore/book[price>35.00]
4、XPath的使用
4.1 选取内容
  • 获取文本内容用 text()
  • 获取注释用 comment()
  • 获取其它任何属性用@xx,如
    • @href
    • @src
    • @value
comment['people_url'] = item.xpath('//header[@class="main-hd"]/a[1]/@href').extract()[0]
4.2 元素标签索引
  • 元素标签如:li、p、div
  • 多个元素标签,位置默认以1开始
  • 最后一个用 li[last()] 不能用 li[-1]
comment['star'] = item.xpath('//header[@class="main-hd"]/span[2]/text()').extract()[0]
4.3 根据属性或者文本直接定位到当前标签
  • 文本是 text()=’xxx’
  • 其它属性是@xx=’xxx’
comment['title'] = item.xpath('//span[@property="v:summary"]/text()').extract()[0]
4.3 根据属性内容选取
  • 想要获取某个标签下所有的文本(包括子标签下的文本),使用string
  • starts-with 匹配字符串前面相等
  • contains 匹配任何位置相等
  • 当然其中的(@class,”content”)也可以根据需要改成(text(),”content”)或者其它属性(@src,”content”)
item.xpath('string(//p[@class="test"])')
item.xpath('//p[starts-with(@class,"content")]/text()')
item.xpath('//p[contains(@class,"content")]/text()')

猜你喜欢

转载自blog.csdn.net/olizxq/article/details/81838315