打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
认识爬虫:python 网页解析器,掌握第三方 lxml 扩展库与 xpath 的使用方法?

前面一章中说到了使用 BeautifulSoup 对象来解析爬虫过程中下载的网页,而今天说的则是使用另外一种扩展库 lxml 来对网页完成解析。同样的,lxml 库能完成对 html、xml 格式的文件解析,并且能够用来解析大型的文档、解析速度也是相对比较快的。

要掌握 lxml 的使用,就需要掌握掌握 xpath 的使用方法,因为 lxml 扩展库就是基于 xpath 的,所以这一章的重点主要还是对 xpath 语法使用的说明。

1、导入 lxml 扩展库、并创建对象

 1# -*- coding: UTF-8 -*-
2
3# 从 lxml 导入 etree
4from lxml import etree
5
6# 首先获取到网页下载器已经下载到的网页源代码
7# 这里直接取官方的案例
8html_doc = """
9<html><head><title>The Dormouse's story</title></head>
10<body>
11<p class="title"><b>The Dormouse's story</b></p>
12
13<p class="story">Once upon a time there were three little sisters; and their names were
14<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
15<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
16<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
17and they lived at the bottom of a well.</p>
18
19<p class="story">...</p>
20"""

21
22# 初始化网页下载器的 html_doc 字符串,返回一个 lxml 的对象
23html = etree.HTML(html_doc)

2、使用 xpath 语法提取网页元素

  • 按照节点的方式获取元素

1# xpath() 使用标签节点的方式获取元素
2print html.xpath('/html/body/p')
3# [<Element p at 0x2ebc908>, <Element p at 0x2ebc8c8>, <Element p at 0x2eb9a48>]
4print html.xpath('/html')
5# [<Element html at 0x34bc948>]
6# 在当前节点的子孙节点中查找 a 节点
7print html.xpath('//a')
8# 在当前节点的子节点中查找 html 节点
9print html.xpath('/html')

  • 按照筛选的方式获取元素

 1'''
2根据单一属性获取元素
3'''

4# 获取子孙节点中,属性 class=bro 的 a 标签
5print html.xpath('//a[@class="bro"]')
6
7# 获取子孙节点中,属性 id=link3 的 a 标签
8print html.xpath('//a[@id="link3"]')
9
10'''
11根据多个属性获取元素
12'''

13# 获取class属性等于sister,并且id等于link3的a标签
14print html.xpath('//a[contains(@class,"sister") and contains(@id,"link1")]')
15
16# 获取class属性等于bro,或者id等于link1的a标签
17print html.xpath('//a[contains(@class,"bro") or contains(@id,"link1")]')
18
19# 使用 last() 函数,获取子孙代的a标签的最后一个a标签
20print html.xpath('//a[last()]')
21# 使用 1 函数,获取子孙代的a标签的第一个a标签
22print html.xpath('//a[1]')
23# 标签筛选,position()获取子孙代的a标签的前两个a标签
24print html.xpath('//a[position() < 3]')
25
26'''
27使用计算的方式,获取多个元素
28'''

29# 标签筛选,position()获取子孙代的a标签的第一个与第三个标签
30# 可以使用的计算表达式:>、<、=、>=、<=、+、-、and、or
31print html.xpath('//a[position() = 1 or position() = 3]')
  • 获取元素的属性与文本

1'''
2使用@获取属性值,使用text() 获取标签文本
3'''

4# 获取属性值
5print html.xpath('//a[position() = 1]/@class')
6# ['sister']
7# 获取标签的文本值
8print html.xpath('//a[position() = 1]/text()')
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python爬虫神器Xpath的使用
python爬虫系列之 xpath:html解析神器
Python|快速掌握Python爬虫XPath语法
小白学 Python 爬虫(19):Xpath 基操
学python爬虫利器xpath,看这一篇就够了!
正则表达式学废了?xpath来救!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服