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

posted on 2019-01-08 16:44  诸子流  阅读(8187)  评论(0编辑  收藏  举报