【爬虫】lxml的使用(xpath选择器、获取文本内容、获取属性、string(.))
1.lxmllxml是一个高效率的HTML或XML文档解析库,用C语言写的,所以解析速度很快,我们可以配合xpath语法使用1.1 xpath语法【爬虫】元素定位(xpath、css)1.2 常见的解析库解析器使用方法优点缺点Python标准库BeautifulSoup(markup, “html.parser”)Python的内置标准库执行速度适中文档容错能力强版本容错能力差lxml HTML
·
1.lxml
lxml是一个高效率的HTML或XML文档解析库,用C语言写的,所以解析速度很快,我们可以配合xpath语法使用
1.1 xpath语法
1.2 常见的解析库
解析器 | 使用方法 | 优点 | 缺点 |
---|---|---|---|
Python标准库 | BeautifulSoup(markup, “html.parser”) | Python的内置标准库 执行速度适中 文档容错能力强 |
版本容错能力差 |
lxml HTML 解析器 | BeautifulSoup(markup, “lxml”) | 速度快 文档容错能力强 |
需要安装C语言库 |
lxml XML 解析器 | BeautifulSoup(markup, [“lxml-xml”]) BeautifulSoup(markup, “xml”) |
速度快 唯一支持XML的解析器 |
需要安装C语言库 |
html5lib | BeautifulSoup(markup, “html5lib”) | 最好的容错性 以浏览器的方式解析文档 生成HTML5格式的文档 |
速度慢 不依赖外部扩展 |
1.3 安装lxml
pip install lxml
2.简单使用
from lxml import etree
html = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
<a class='sister'>哈哈哈</a>
and they lived at the bottom of a well.
</p>
<p class="story">...</p>
"""
# html = etree.parse('hello.html') # 读取本地文件
html = etree.HTML(html)
# text = etree.tostring(html, encoding="utf-8").decode() # 打印HTML源码
# print(text)
a_text = html.xpath("//a[@class='sister']/text()") # 获取文本内容
print("a_text", a_text)
a_text = html.xpath("//p[@class='story']/text()") # 获取文本内容,返回列表
print("a_text: ", a_text)
a_text = html.xpath("//p[@class='story']")[0].xpath("string(.)") # 获取文本内容,不带列表的字符串,如果存在标签嵌套时可以使用
print("a_text: ", a_text)
a_href = html.xpath('//a[@id="link2"]/@href') # 获取某个属性
print("a_href: ", a_href)
# 如果获得的是element对象,可以继续使用xpath
a_element = html.xpath("//a[@class='sister']")
print(a_element)
a_list = []
for a in a_element:
item = dict()
# 如果取不到就设置为None
item["href"] = a.xpath('./@href')[0] if len(a.xpath('./@href')) > 0 else None
item["text"] = a.xpath('./text()')[0] if len(a.xpath('./text()')) > 0 else None
a_list.append(item)
print(a_list)
3.实际运用
可查看之前的文章
更多推荐
所有评论(0)