lxml.etree--用Xpath获取静态文本

首图

本文转载自知乎专栏《lxml.etree:用Xpath获取静态文本》

一、简介

lxml 是一个结合了 libxml2快速强大的特效和 Python 语言的易用性的一个第三方库,parse html 具有比 BeautifulSoup 更高的性能。

from lxml import etree  # 调用方法

二、基础

Element是 lxml 中的一个类,大部分XML都是通过这个类创建与存储的。

root = etree.Element("root")
print(root.tag) #调用root的tag属性
>>> root

child1 = etree.SubElement(root, "child1")  #为根节点添加子节点

列表List

为了方便获取子节点,这些子节点都是以列表的方式储存的。

child = root[0]  
print(child.tag)
>>> child1

# child{柴鸥的}=子孙

字典Dict

XML Element 的属性格式为 Python 中的字典格式,你可以通过以下方式添加或获取:

root = etree.Element("root", interesting="totally")  
print(root.get("interesting"))
>>> totally

# interesting{因踹死钉} = 引起兴趣的
# element{艾乐蒙特} = 元素
# tag{泰格} = 标签

三、解析文本

lxml.etree中提供了几种方法用于解析文本:

etree.fromstring()  # 用于解析字符串
etree.HTML()        # 用于解析HTML对象
etree.XML()         # 用于解析XML对象
etree.parse()       # 用于解析文件类型的对象,parse{帕斯]=解析

四、用 Xpath 获取静态文本

Xpath为XML路径语言,用来确定XML文档中某个位置,类似于地理中经纬网的作用。

五、实例爬取东方财富网数据

用 Xpath 获取静态文本:

import requests
from lxml import etree

# 用Requests库抓取整个页面
url = 'http://data.eastmoney.com/cjsj/cpi.html'
content = requests.get(url).content

# 用etree.HTML()解析对象
html = etree.HTML(content)

# 右键copy.Xpath复制后,通过etree.xpath()函数调用
html.xpath('//*[@id="tb"]/tr[3]/td[2]/text()')
# 部分浏览器会在table标签下添加tbody标签,因此将Xpath中的tbody删去,否则将无法获取数据。

六、ElementPath

lxml 中支持一种类似于Xpath的路径语言,叫ElementPath。里面提供了四种方法获取元素和文档树:

iterfind()  # 迭代所有符合条件的元素
findall()   # 以列表形式返回所有元素
find()      # 返回第一个元素
findtext()  # 返回第一个元素的 text

ElementPath中不能使用绝对路径,因此不能直接使用从浏览器复制的Xpath,需要在前面加个“.”号。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值