【爬虫】lxml的使用(xpath选择器、获取文本内容、获取属性、string(.))

1.lxml

lxml是一个高效率的HTML或XML文档解析库,用C语言写的,所以解析速度很快,我们可以配合xpath语法使用

1.1 xpath语法

【爬虫】元素定位(xpath、css)

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语言库
html5libBeautifulSoup(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.实际运用

可查看之前的文章

【python】爬取正在上映的豆瓣电影信息(etree、xpath)

【python】爬取豆瓣电影Top250(etree、xpath)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰冷的希望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值