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 = "<test>test</test>"
str_unescape = html.unescape(str_need_unescape)
参考:https://www.cnblogs.com/kungfupanda/p/4313903.html
Python3解析html高级操作的更多相关文章
- python3之shutil高级文件操作
1.shutil高级文件操作模块 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作.对单个文件的操作也可参见os模块. 2.shutil模块的拷 ...
- python3解析库pyquery
pyquery是一个类似jquery的python库,它实现能够在xml文档中进行jQuery查询,pyquery使用lxml解析器进行快速在xml和html文档上操作,它提供了和jQuery类似的语 ...
- Python3学习(3)-高级篇
Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 文件读写 源文件test.txt line1 line2 line3 读取文件内容 f = ope ...
- [Session] SessionHelper2---C#关于Session高级操作帮助类 (转载)
点击下载 SessionHelper2.rar 这个类是关于Session的一些高级操作1.添加时限制时间2.读取对象3.读取数据等等看下面代码吧 /// <summary> /// 联系 ...
- 使用Dom解析器,操作XML里面的信息
import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;impo ...
- cassandra高级操作之索引、排序以及分页
本次就给大家讲讲cassandra的高级操作:索引.排序和分页:处于性能的考虑,cassandra对这些支持都比较简单,所以我们不能希望cassandra完全适用于我们的逻辑,而是应该将我们的逻辑设计 ...
- MySQL学习笔记_9_MySQL高级操作(上)
MySQL高级操作(上) 一.MySQL表复制 create table t2 like t1; #复制表结构,t2可以学习到t1所有的表结构 insert into t2 ...
- MySQL学习笔记_10_MySQL高级操作(下)
MySQL高级操作(下) 五.MySQL预处理语句 1.设置预处理stmt,传递一个数据作为where的判断条件 prepare stmt from "select * from table ...
- 【转】python3解析库lxml
转自:http://www.cnblogs.com/zhangxinqi/p/9210211.html 阅读目录 1.python库lxml的安装 2.XPath常用规则 (1)读取文本解析节点 (2 ...
随机推荐
- 原生JS实现表单序列化serialize()
有一个form表单,要用AJAX后台提交,原来想拼接json,但是数据多了麻烦,不灵活. 用HTML5的FormData来初始化表单 var formdata=new FormData(documen ...
- CCF CSP 201812-1 小明上学
题目链接:http://118.190.20.162/view.page?gpid=T80 问题描述 试题编号: 201812-1 试题名称: 小明上学 时间限制: 1.0s 内存限制: 512.0M ...
- Spring:容器基本用法
bean是Spring 最核心的东西,打个比方,假设Spring是一个水桶,那么bean就是水桶里的水,水桶离开水后,就没啥作用了.我们先来看一下bean的定义: public class Perso ...
- springboot+mybatis环境的坑和sql语句简化技巧
1.springfox-swagger实体类无限递归 https://hacpai.com/article/1525674135818 里面有不完美的解决方案 不用动源码的解决方案也有,在swagge ...
- Python Iterables Iterators Generators
container 某些对象包含其它对象的引用,这个包含其它对象引用的对象叫容器.例如list可以包含int对象,或者由其它数据类型(或数据结构)的对象组成一个list. 对其他对象的引用是容器值的一 ...
- 根据文字动态计算Label高度或宽度
//根据已知的label宽度计算文字高度 CGRect rect = [reson boundingRectWithSize:CGSizeMake(label_W, 0) options:NSStri ...
- redis哨兵集群配置
redis 集群架构图: 需要先配置redis主从,我这边是单机部署的. 采用一主一从,两个sentinel. redis host: 172.31.11.235 redis-master port: ...
- es6 class中责任链模式与AOP结合
责任链模式大家应该都清楚,比如JS中的冒泡,Java中的拦截器.过滤器,都运用到了责任链模式. 可以看我之前的文章介绍责任链的:https://www.cnblogs.com/wuguanglin/p ...
- 在CAcUiTabChildDialog中使用点取或者(拾取)时卡住的问题
问题描述:在Tab的对话框中,其子对话框CAcUiTabChildDialog中用点取或者(拾取)时卡住的问题 在子对话框中: BeginEditorCommand(); CompleteEditor ...
- 271. 杨老师的照相排列【线性DP】
杨老师希望给他的班级拍一张合照. 学生们将站成左端对齐的多排,靠后的排站的人数不能少于靠前的排. 例如,12名学生(从后向前)可以排列成每排5,3,3,1人,如下所示: X X X X X X X X ...