一、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 = "<test>test</test>" str_unescape = html.unescape(str_need_unescape)