Python爬虫常用工具----html解析库----xPath相关知识点与实战演示

xPath

  • 一种HTML和XML的查询语言,能在XML和HTML的树状结构中寻找节点
  • 安装    pip install lxml

xPath的使用

获取文本

//标签1[@属性1="属性值1"]/标签2[@属性2="属性值2"]/..../text()

获取属性值

//标签1[@属性1="属性值1"]/标签2[@属性2="属性值2"]/..../@属性n

以下为范本html文件:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title>XPATH测试</title>
	<link rel="stylesheet" href="">
</head>
<body>
	<h3>标题</h3>
	<ul>
		<li>内容1</li>
		<li>内容2</li>
		<li class="important">内容3演示用</li>
		<li>内容4</li>
		<li>内容5</li>
	</ul>
	<div>
		内容待输入
	</div>
	<p>
		段落内容 在p中
	</p>
	<div id="container">
		段落文字
		<a href="http://www.baidu.com" title="超链接">跳转到百度</a>
		<p class="content">
			区块内容1
		</p>
		<p class="content">
			区块内容2
		</p>
		<p class="content">
			区块内容3
		</p>
		<p class="content">
			区块内容4
		</p>
		<p class="content-block">
			区块内容5    content-block  中
		</p>
		<p class="block-content">
			区块内容6  末尾内容
		</p>
	</div>
	<p>
		末尾文字
	</p>
</body>
</html>

解析实例:接下来将使用python对其进行演示,

 # 读取文件中的内容
    f = open('./files/index.html', 'r', encoding='utf-8')
    s = f.read()
    selector = html.fromstring(s)

将上面的HTML代码以index.html的文件保存到项目目录中files文件夹中。

在方法中读取文件内容到selector

  # 解析H3的标题
    h3 = selector.xpath('/html/body/h3/text()')
    print(h3[0])

接下来通过xpath中获取文本的方法,获取h3的标题

打印如下:

 # 解析ul里的内容
    # ul = selector.xpath('/html/body/ul/li')
    ul = selector.xpath('//ul/li')
    print(len(ul))
    for li in ul:
        print(li.xpath('text()')[0])

接下来再试着解析ul中的内容

首先打印长度,再循环打印每一个li中的内容:

打印结果如下:

    # 解析ul中的important元素值
    ul2 = selector.xpath('/html/body/ul/li[@class="important"]/text()')
    print(ul2)

让xPath寻找ul下li中class为'imporant'的文本,代码打印如下:

 

解析a标签的内容

 a = selector.xpath('//div[@id="container"]/a/text()')
标签内的内容
 print(a[0])
href属性
    alink = selector.xpath('//div[@id="container"]/a/@href')
    print(alink[0])

打印结果:

 

解析P标签
    p = selector.xpath('/html/body/p[last()]/text()')
    print((f'p len: {len(p)}') )
    print((f'p[0]: {p[0]}') )

打印如下:

获取ul下li的第三个成员的文本:

    test = selector.xpath('/html/body/ul/li[3]/text()')
    print(test[0])

打印:

 

感谢看到这里,如果有帮助的话欢迎点个赞!谢谢各位

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值