爬虫之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()')