xpath关于./ .// //../
时间: 2023-10-02 17:06:41 浏览: 146
XPath 语法中,`.` 表示当前节点,`..` 表示当前节点的父节点,`/` 表示从根节点开始查找,`//` 表示在子孙节点中查找。
`./` 表示当前节点下的子节点,例如 `./div` 表示在当前节点下查找所有的 div 标签。
`.//` 表示在当前节点及其子孙节点中查找,例如 `.//div` 表示在当前节点及其子孙节点中查找所有的 div 标签。
`//../` 表示在当前节点的父节点的兄弟节点中查找,例如 `//../div` 表示在当前节点的父节点的兄弟节点中查找所有的 div 标签。
相关问题
xpath里//和./的区别
在XPath中,"//"和"./"都是用于定位节点的路径表达式,但它们有一些区别。
1. "//":它表示选择文档中的任何位置的节点。无论节点在文档的任何位置,都会被选择。例如,使用"//div"将选择文档中所有的 div 节点。
2. "./":它表示选择当前节点的子节点。它是相对路径表达式,以当前节点为基准。例如,使用"./div"将选择当前节点下的所有 div 子节点。
总结起来,"//"用于选择文档中的任何位置的节点,而"./"用于选择当前节点的子节点。
for li in li_list: book_tag= li.xpath("//h1/text()").get().replace("豆瓣图书标签: ","") book_name = li.xpath("./div[@class='info']/h2/a/@title").get() # 书名 book_info = li.xpath(".//div[@class='pub']/text()").get() book_nums = li.xpath(".//span[@class='rating_nums']/text()").get() book_pl = li.xpath(".//span[@class='pl']/text()").get().strip().replace("(","").replace("人评价)","")
这段代码位于类 `DouBanBook` 中的 `parse_start_url` 方法中。它使用 XPath 表达式从标签页的响应中提取图书的相关信息。
- 对于每个 `li` 元素,在其下面进行如下操作:
- 使用 `xpath` 方法选取 `h1` 元素,并使用 `get` 方法获取文本内容。然后,对该文本进行处理,去掉开头的 "豆瓣图书标签: ",得到 `book_tag`。
- 使用相对路径的 XPath 表达式选取 `div` 元素下的 `h2` 元素的 `a` 元素,并使用 `get` 方法获取 `title` 属性的值,即书名,赋值给 `book_name`。
- 使用相对路径的 XPath 表达式选取当前元素下的 `div` 元素中的 `pub` 类的文本内容,即书籍的信息,赋值给 `book_info`。
- 使用相对路径的 XPath 表达式选取当前元素下的 `span` 元素中的 `rating_nums` 类的文本内容,即书籍的评分,赋值给 `book_nums`。
- 使用相对路径的 XPath 表达式选取当前元素下的 `span` 元素中的 `pl` 类的文本内容,即书籍的评论人数,赋值给 `book_pl`。在处理前需要去除首尾空格,并替换掉括号和括号内的内容。
这段代码的作用是从标签页中提取每本图书的标签、书名、信息、评分和评论人数。然后,将这些信息存储在相应的变量中。您还有其他问题吗?
阅读全文