0
点赞
收藏
分享

微信扫一扫

lxml库丨Python爬虫基础入门系列(6)

文章目录


前言

简述
lxml 是一种使用 Python 编写的库,可以迅速、灵活地处理 XML ,支持 XPath (XML Path Language)


话不多说,开始学习
在这里插入图片描述

lxml库

学习目的

利用系列(5)中涉及到的XPath语法,来快速的定位特定元素以及节点信息,目的是:提取出 HTML、XML 目标数据

如何安装

  • Ubuntu
sudo apt-get install libxml2-dev libxslt1-dev python-dev
sudo apt-get install zlib1g-dev
sudo apt-get install libevent-dev
sudo pip install lxml

利用 pip 安装即可

  • Windows:
    在Windows环境下的安装lxml方法(只要是.whl文件都用此方法)

初步使用

首先我们利用lxml来解析 HTML 代码,先来一个小例子来感受一下它的基本用法。

from lxml import etree
text = '''
<div>
  <ul>
       <li class="item-0"><a href="link1.html">first item</a></li>
       <li class="item-1"><a href="link2.html">second item</a></li>
       <li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
       <li class="item-1"><a href="link4.html">fourth item</a></li>
       <li class="item-0"><a href="link5.html">fifth item</a>
   </ul>
</div>
'''
#Parses an HTML document from a string
html = etree.HTML(text)   
#Serialize an element to an encoded string representation of its XML tree
result = etree.tostring(html)
print result

所以输出结果是这样的

<html><body><div>
  <ul>
       <li class="item-0"><a href="link1.html">first item</a></li>
       <li class="item-1"><a href="link2.html">second item</a></li>
       <li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
       <li class="item-1"><a href="link4.html">fourth item</a></li>
       <li class="item-0"><a href="link5.html">fifth item</a>
   </li></ul>
</div>
</body></html>

不仅补全了 li 标签,还添加了 body,html 标签。

XPath实例测试

(1)获取所有的 <li> 标签

print type(html)
result = html.xpath('//li')
print result
print len(result)
print type(result)
print type(result[0])

运行结果

<type 'lxml.etree._ElementTree'>
[<Element li at 0x1014e0e18>, <Element li at 0x1014e0ef0>, <Element li at 0x1014e0f38>, <Element li at 0x1014e0f80>, <Element li at 0x1014e0fc8>]
5
<type 'list'>
<type 'lxml.etree._Element'>

可见,每个元素都是 Element 类型,是一个个的标签元素,类似现在的实例

<Element li at 0x1014e0e18> Element类型代表的就是
<li class="item-0"><a href="link1.html">first item</a></li>
  • [注意]
    Element类型是一种灵活的容器对象,用于在内存中存储结构化数据。
    每个element对象都具有以下属性:
  1. tag:string对象,标签,用于标识该元素表示哪种数据(即元素类型)。
  2. attrib:dictionary对象,表示附有的属性。
  3. text:string对象,表示element的内容。
  4. tail:string对象,表示element闭合之后的尾迹。
  • 实例
<tag attrib1=1>text</tag>tail
1     2        3         4
result[0].tag
result[0].text
result[0].tail
result[0].attrib

(2)获取 <li> 标签的所有 class

html.xpath('//li/@class')

运行结果

['item-0', 'item-1', 'item-inactive', 'item-1', 'item-0']

(3)获取 <li> 标签下属性 href 为 link1.html 的 <a> 标签

html.xpath('//li/a[@href="link1.html"]')

运行结果

[<Element a at 0x10ffaae18>]

(4)获取 <li> 标签下的所有 <span> 标签

注意下面这么写是不对的X

html.xpath('//li/span')

因为 / 是用来获取子元素的,而 <span> 并不是 <li> 的子元素,所以,要用双斜杠//

html.xpath('//li//span')

运行结果

[<Element span at 0x10d698e18>]

(5)获取 <li> 标签下的所有 class,不包括 <li>

html.xpath('//li/a//@class')

运行结果

['blod']

(6)获取最后一个 <li><a>href

html.xpath('//li[last()]/a/@href')

运行结果

['link5.html']

(7)获取 classbold 的标签名

result = html.xpath('//*[@class="bold"]')
print result[0].tag

运行结果

span

通过以上实例,相信大家已经对 XPath 的基本用法有了基本的了解。
在这里插入图片描述


总结

关于更多的 lxml库 知识,大家可以lxml python 官方文档http://lxml.de/index.html

Python爬虫基础入门系列(6) 就到这,希望你早日修炼成为爬虫大佬!当然,如果你准备系统地学爬虫及更多Python编程技术,可戳我文末的名片,Free领取最新Python爬虫资料/免费咨询/学习规划~

戳我名片 · 领取福利

在这里插入图片描述

举报

相关推荐

0 条评论