欢迎关注微信公众号:松鼠爱吃饼干

每天都有一个Python案例的详细教学

Python爬虫基础讲解(七):xpath的语法_html


xpath语法

XPath使用路径表达式来选取XML文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

下面列出了最有用的表达式:

Python爬虫基础讲解(七):xpath的语法_python_02


在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:


Python爬虫基础讲解(七):xpath的语法_路径表达式_03

选取未知节点


Python爬虫基础讲解(七):xpath的语法_路径表达式_04

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:


Python爬虫基础讲解(七):xpath的语法_路径表达式_05

案例

Python爬虫基础讲解(七):xpath的语法_html_06

import parsel # str --> Selector对象具有xpath方法
提取到的数据返回一个列表

html_str = """
<div>
<ul>
<li class="item-i">
<a href="link1.html">第一个</a>
</li>

<1iclass="item-2个>J学言
<a href="link2. html">第二个</a>
</li>

<li class="item-3">
<a href="link3.html">第三个</a>
</li>

<li class="item-4">
<a href="link4.html">第四个</a>
</li>

<li class="item-5">
<a href="link5.html">第五个</a>
</li>
</ul>
</div>
# 1、转换数据类型
# data = parsel.Selector(html_str).extract()
# parsel能够把缺失的html标签补充完成
data = parsel.Selector (html_str) # parsel能够把缺失的html标签补充完成
# 2、解析数据--list类型
# print(data)
# 2、1从根节点开始,获取所有<a>标签
result = data.xpath(' /html/body/ div/ul/li/a').extract()
# 2、2跨节点获取所有<a>标签
result = data. xpath('/ /a').extract()
# 2、3选取当前节点――使用场景:需要对选取的标签的下一级标签进行多次提取
result = data.xpath('//ul')
result2 = result.xpath(' ./li').extract() #提取当前节点下的<li>标签
result3 = result.xpath(' ./li/a').extract() #提取当前节点下的<a>标签
# 2、4选取当前节点的父节点,获取父节点的class属性值
result = data.xpath(' //a')
result4 = result.xpath('../@class').extract()
# 2、5获取第三个<li>标签的节点(两种方法)
result = data. xpath('//li[3]').extract()
result = data. xpath(' / /1i')[2].extract()
# 2、6 通过定位属性的方法获取第四个<a>标签
result = data. xpath(' / / a [@href="link4.html"]’).extract()
#2、7用属性定位标签,获取第四个<a>标签包裹的文本内容
result = data.xpath('//a[@href="link4.html"]/text()' ). extract()
#2、8获取第五个<a>标签的href属性值
result = data. xpath(' / /1i[5]/a/@href').extract(#了解模糊查询
result = data.xpath('//li[contains(@class,"it")]’).extract ()
#同时获取<li>标签的属性以及<a>标签的文本
# result = data.xpath('//li/@class|//a/text()').extract()

print (result)

如何选取多个标签?

通过在路径表达式中使用“”运算符,您可以选取若干个路径。(逻辑运算符)

小结

  1. xpath的概述XPath (XML Path Language),解析查找提取信息的语言
  2. xpath的节点关系:根节点,子节点,同级节点
  3. xpath的重点语法获取任意节点://
  4. xpath的重点语法根据属性获取节点:标签[@属性=’值’]
  5. xpath中获取节点的文本:text )
  6. xpath的获取节点属性值:@属性名