zoukankan      html  css  js  c++  java
  • Python3解析html高级操作

    一、xpath相关

    1.1 xpath获取节点下的所有内容

    问题描述:xpath获取节点下的所有文本可通过“*//text()”实现,但如果想获取节点下的内容---包括文本和标签那就没有直接的办法。

    处理办法:此时可使用lxml.html.tostring()方法,将筛选出的标签转换为字符串。

    import lxml
    # 没有下边这句直接使用lxml.html会报错lxml没有html,不懂什么道理
    from lxml import html
    
    # xpath出来的是列表,lxml.html.tostring只能接收具体的一个标签所以要有[0]
    target_lable = dom.xpath("//div[@id='target_lable_id']")[0]
    # all_text_in_target_label = target_label.xpath("*//text()")
    everything_in_target_label = lxml.html.tostring(target_lable)

    参考:https://www.oschina.net/question/2806953_2214094

    1.2 xpath获取包含某种样式的节点

    问题描述:如果有多个div节点都为<div class="common1"></div>,想要获取所有这些div节点我们可以通过dom.xpath("//div[@class='common1']")来获取。但如果有的div为<div class="common1 special1"></div>有的div为<div class="common1 special2"></div>,此时想要获取所有这些div节点我们xpath该如何写呢。

    处理办法:这两个div有共用的样式common1,如果能通过“包含common1”的形式来筛选就能达到目的;可通过xpath的contains来实现这一效果。

    dom.xpath("//div[contains(@class, 'card-header')]")

    二、html实体转义和反转义

    问题描述:python生成html时我们可能会需要进行html实体转义,而从html页面获取值时可能会需要将转义还原。网上很多要么只讲反转义,要么比较旧有些库都废弃了。

    处理办法:现在Python3可以使用html.escape()和html.unescape(),很方便地实现html实体转义和反转义。

    import html
    
    # 将字符串进行html实体转义
    str_need_escape = "<test>test</test>"
    str_escape = html.escape(str_need_escape)
    
    # 将已进行html实体转义还原
    str_need_unescape = "&lt;test&gt;test&lt;/test&gt;"
    str_unescape = html.unescape(str_need_unescape)

    参考:https://www.cnblogs.com/kungfupanda/p/4313903.html

  • 相关阅读:
    UML第一次编程作业
    css文本属性
    css文字属性
    Qobject设置对象名称和属性
    m3u8
    easyUI tree jQuery
    easyUI layout
    正则表达式
    Spring mvc 数据验证框架注解
    blur和click事件的先后顺序问题
  • 原文地址:https://www.cnblogs.com/lsdb/p/10239840.html
Copyright © 2011-2022 走看看