Erlo

10-python爬虫之lxml库

2020-10-12 18:31:03 发布   321 浏览  
页面报错/反馈
收藏 点赞

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

lxml python 官方文档 http://lxml.de/index.html

学习目的

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

http://blog.csdn.net/g1apassz/article/details/46574963

http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

初步使用

首先我们利用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="/links.html?l=STgzMXlWWGNBZ05BMmc0NmQ0YkF2a2l3bFlWdnVYbVo%3D"]')
    

    运行结果

    []
    

    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 的基本用法有了基本的了解

    实战项目

    豆瓣电影排行榜

    image

    https://movie.douban.com/chart

    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
    IT 入门感谢关注

  • 登录查看全部

    参与评论

    评论留言

    还没有评论留言,赶紧来抢楼吧~~

    手机查看

    返回顶部

    给这篇文章打个标签吧~

    棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认