10-python爬虫之lxml库

辅助视频教程:Python基础教程|xin3721自学网ul li id=itemtitlePython3 从入门到精通视频教程/li /ul ul li class=description Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),icon-default.png?t=L892https://www.xin3721.com/eschool/pythonxin3721/

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

lxml python 官方文档 lxml - Processing XML and HTML with Python

学习目的

利用上节课学习的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:

初步使用

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

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

from lxml import etree

text ='''



'''

#把字符串解析为html文档

html = etree.HTML(text) 

  

#将元素序列化为其XML树的字符串表示形式

result = etree.tostring(html)

print (result)

所以输出结果是这样的

    第一项 second item third item fourth item fifth item

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

XPath实例测试

**1. 获取所有的 **

  •  标签

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

    运行结果

    
    
    [, , , , ]
    
    5
    
    
    
    
    

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

     
    
    
    
    Element类型代表的就是
    
    
  • 第一项
  • [注意]

    Element类型是一种灵活的容器对象,用于在内存中存储结构化数据。

    每个element对象都具有以下属性:

    1. tag:string对象,标签,用于标识该元素表示哪种数据(即元素类型)。

    2. attrib:dictionary对象,表示附有的属性。

    3. text:string对象,表示element的内容。

    4. tail:string对象,表示element闭合之后的尾迹。

    示例

    texttail1     2        3         4
    
    result[0].tag     #li
    

    2. 获取 

  •  标签的所有 class

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

    运行结果

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

    3.获取 

  •  标签下属性 href 为 link1.html 的  标签

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

    运行结果

    []
    

    4.获取 

  •  标签下的所有 ** 标签**

    注意这么写是不对的

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

    因为 / 是用来获取子元素的,而  并不是 

  •  的子元素,所以,要用双斜杠

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

    运行结果

    []
    

    5. 获取 

  •  标签下的所有 class,不包括 
  • html.xpath('//li/a//@class')
    

    运行结果

    ['blod']
    

    **6. 获取最后一个 **

  •  的 的 href

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

    运行结果

    ['link5.html']
    

    7. 获取 class 为 bold 的标签名

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

    运行结果

    span
    

    通过以上实例的练习,相信大家对 XPath 的基本用法有了基本的了解

    实战项目

    豆瓣电影排行榜

    10-python爬虫之lxml库_第1张图片

    豆瓣电影排行榜

    from lxml import etree
    import urllib.parse
    import urllib.request
    
    url='https://movie.douban.com/chart'
    # 豆瓣排行榜
    
    herders={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36', 'Referer':'https://movie.douban.com/','Connection':'keep-alive'}
    # 请求头信息
    
    req = urllib.request.Request(url,headers=herders)
    # 设置请求头
    response=urllib.request.urlopen(req)
    # response 是返回响应的数据
    htmlText=response.read()
    # 读取响应数据
    
    
    # 把字符串解析为html文档
    html = etree.HTML(htmlText)
    result = html.xpath('//div[@class="pl2"]/a')
    # 解析到所有的标题
    
    file = open('data.txt','a+',encoding='utf-8')
    # 打开一个文本文件
    
    for line in result:
        file.write(line.xpath('string(.)').replace('\n','').replace(' ','')+'\n')
    # 遍历解析到的结果
    # 获取里面的文字.移除换行.替换空格+换行
    
    file.close()
    

    结果

    data.txt

    
    从邪恶中拯救我/魔鬼对决(台)/请救我于邪恶
    神弃之地/恶魔每时每刻
    监视资本主义:智能陷阱/社交困境/智能社会:进退两难(台)
    我想结束这一切/i’mthinkingofendingthings(风格化标题)
    禁锢之地/Imprisonment/TheTrapped
    鸣鸟不飞:乌云密布/SaezuruToriWaHabatakanai:TheCloudsGather
    树上有个好地方/TheHomeintheTree
    辣手保姆2:女王蜂/撒旦保姆:血腥女王/TheBabysitter2
    冻结的希望/雪藏希望:待日重生/HopeFrozen:AQuestToLiveTwice
    铁雨2:首脑峰会/铁雨2:首脑会谈/钢铁雨2:核战危机(港)
    
    

    单词表

    
    
    """
    单词表
    parse       解析
    request     请求
    headers     请求头
    result      结果
    file        文件
    encoding    编码
    write       写
    open        打开
    string      文本
    replace     替换
    
    """
    

    作业

    (1)练习一下lxml、etree、xpath的整个的操作

    (2)试试上节课XPath的语法以及Html,自己动手实践

    在线练习:https://www.520mg.com/it

  • 你可能感兴趣的:(python基础教程,python)