Python3爬虫系列整理(四)lxml库

Python3爬虫系列整理(四)lxml库

1 lxml

安装**:pip3 install lxml

lxml,使用的是xpath的语法

xpath 是一门在 XML 文档中查找信息的语言。(遵循xml,html的树形结构)

xpath 可用来在 XML,html 文档中对元素和属性进行遍历。

lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高

XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索

XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择** 例子:/html/body/div[6]/ul /html/body/div[6]/ul/li[1]/a**

1.1 xpath语法

1.1.1、选取节点

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

列出了最有用的路径表达式.

img

1.1.2、在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

img

1.1.3、选取未知节点(re)

img

1.1.4、选取若干路径

img

2.1、初步使用

text = ‘’’****

****

****

** <meta = charset=‘UTF-8’ >******

** Test**

****

****

**

******

**

******

**

******

** Hello World******

**

******

** ******

** ******

** ******

****

’’’****

首先我们使用 lxml 的 etree 库,然后利用 etree.HTML 初始化,然后我们将其打印出来。

其中,这里体现了 lxml 的一个非常实用的功能就是自动修正 html 代码,lxml 因为继承了 libxml2 的特性,具有自动修正 HTML 代码的功能。比如,你没有写html的闭合标签,lxml默认会给你添加。

#coding=utf-8****

from lxml import etree****

text = ‘’’****

****

****

** <meta = charset=‘UTF-8’ >******

** Test**

****

****

**

******

**

******

**

******

** Hello World******

**

******

** ******

** ******

** ******

****

’’’****

#初始化生成一个xpath解析对象****

html = etree.HTML(text)****

#将xpath对象解析输出代码****

result = etree.tostring(html,encoding=‘utf-8’)****

#查看代码****

print(result.decode())****

#查看xpath解析对象****

print(type(html))****

#查看result****

print(type(result))****

运行结果如下:

****

** **

** **Test

**

**

**

**

**

**

** Hello World**

**

**

** **

** **

** **

<class ‘lxml.etree._Element’>

<class ‘bytes’>

解析:以上代码标红的地方,证明lxml就有自动修复功能。

2.2获取标签**

#coding = utf-8****

from lxml import etree****


text = ‘’’****

****

****

** <meta = charset=‘UTF-8’ >******

** Test**

****

****

**

******

**

******

**

******

** Hello World******

**

******

** ******

** ******

** ******

****

’’’****

#初始化生成一个xpath解析对象****

html = etree.HTML(text)****


result = html.xpath(’/html/body/div/div/p’)****

#查看内容也可以用这种result = html.xpath(’/html/body/div/div/p/text()’),然后print(result)****

for i in result:****

#查看内容****

** print(i.text)******

#查看标签****

** print(i.tag)******

#查看属性****

** print(i.attrib)******



result = html.xpath(’//p’)****

for i in result:****

** #查看内容******

** print(i.text)******

** #查看标签******

** print(i.tag)******

** #查看属性******

** print(i.attrib)******

#获取节点的属性****

result = html.xpath**("//p/@class")******


result = html.xpath**(’//div[@class = “nice”]/p’)******

for i in result:****

** print(i.text)******

** print(i.tag)******

** print(i.attrib)******


# | 分割来选取若干个路径****



**from ****lxml **import etree

text = ’’'

****

****

** <meta = charset=‘UTF-8’ >******

** Test******


****

****

**

******

**

******

**

******

** Hello World******

**

******

**

******

** 风一般的男人******

**

******

** ******

** ******

** ******

****

’’’****


#初始化生成xpath对象****

html = etree.HTML(text)****


result = html.xpath("//p[@class = ‘p’]|//p[@class=‘e’]")****

**for ****i **in result:

** print(i)******

** print(i.text)#取出内容**

** print(i.tag)#取出标签**

** print(i.attrib)#取出属性**

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值