关于python:认识爬虫python-网页解析器掌握第三方-lxml-扩展库与-xpath-的使用方法

37次阅读

共计 2236 个字符,预计需要花费 6 分钟才能阅读完成。

后面一章中说到了应用 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()')

更多精彩返回微信公众号【Python 集中营】,专一于 python 技术栈,材料获取、交换社区、干货分享,期待你的退出~

正文完
 0