一、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

Python3解析html高级操作的更多相关文章

  1. python3之shutil高级文件操作

    1.shutil高级文件操作模块 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作.对单个文件的操作也可参见os模块. 2.shutil模块的拷 ...

  2. python3解析库pyquery

    pyquery是一个类似jquery的python库,它实现能够在xml文档中进行jQuery查询,pyquery使用lxml解析器进行快速在xml和html文档上操作,它提供了和jQuery类似的语 ...

  3. Python3学习(3)-高级篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 文件读写 源文件test.txt line1 line2 line3 读取文件内容 f = ope ...

  4. [Session] SessionHelper2---C#关于Session高级操作帮助类 (转载)

    点击下载 SessionHelper2.rar 这个类是关于Session的一些高级操作1.添加时限制时间2.读取对象3.读取数据等等看下面代码吧 /// <summary> /// 联系 ...

  5. 使用Dom解析器,操作XML里面的信息

    import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;impo ...

  6. cassandra高级操作之索引、排序以及分页

    本次就给大家讲讲cassandra的高级操作:索引.排序和分页:处于性能的考虑,cassandra对这些支持都比较简单,所以我们不能希望cassandra完全适用于我们的逻辑,而是应该将我们的逻辑设计 ...

  7. MySQL学习笔记_9_MySQL高级操作(上)

    MySQL高级操作(上) 一.MySQL表复制 create table t2 like t1;               #复制表结构,t2可以学习到t1所有的表结构 insert into t2 ...

  8. MySQL学习笔记_10_MySQL高级操作(下)

    MySQL高级操作(下) 五.MySQL预处理语句 1.设置预处理stmt,传递一个数据作为where的判断条件 prepare stmt from "select * from table ...

  9. 【转】python3解析库lxml

    转自:http://www.cnblogs.com/zhangxinqi/p/9210211.html 阅读目录 1.python库lxml的安装 2.XPath常用规则 (1)读取文本解析节点 (2 ...

随机推荐

  1. [转载]Oracle日期周详解IW

    1 ORACLE中周相关知识描述 1.1           日期格式化函数 TO_CHAR(X [,FORMAT]):将X按FORMAT格式转换成字符串.X是一个日期,FORMAT是一个规定了X采用 ...

  2. 对于react中的this.setState的理解

    一.this.setState第二个参数的作用:修改数据更新后最新的DOM结构 二.this.setState为什么是异步的? 1.setState只在合成事件和钩子函数中是“异步”的,在原生事件和s ...

  3. GitHub Toturial

    GitHub Toturial Git Summary 1. 设置姓名和email git config --global user.name "YuboFeng" git con ...

  4. 编程类-----matlab基础语法复习(2)

    2019年美赛准备:matlab基本题目运算 clear,clc %% 计算1/3 + 2/5 + ...3/7 +10/21 % i = 1; j = 3; ans = 0; % while i & ...

  5. python进阶(一)

    一.调试Debugging应用 (1)命令行内运行 $ python -m pdb my_script.py 这会触发debugger在脚本第⼀⾏指令处停⽌执⾏.这在脚本很短时会很有帮助.你可以通过( ...

  6. centos 安装python3与Python2并存,并解决"smtplib" object has no attribute 'SMTP_SSL'的错误

    1.需要先安装python3依赖的包yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readli ...

  7. TCP 传输控制协议

    开头先说几个协议: IP:网际协议 TCP:传输控制协议 Http:超文本传输协议 AMQP:高级消息队列协议 一:TCP是什么? TCP(Transmission Control Protocol ...

  8. vue filters中使用data中数据

    vue filters中 this指向的不是vue实例,但想要获取vue实例中data中的数据,可以采用下面方法.在 beforeCreate中将vue实例赋值给全局变量app0,然后filters中 ...

  9. [luaj]在安卓用使用luaj

    luaj与安卓 什么是luaj luaj是一个Java的一个lua语言引擎,他可以让你在java上运行Lua代码. 在安卓中使用lua干嘛 lua代码可以用来书写布局,或者一些业务逻辑. 为什么要在安 ...

  10. 【我的前端自学之路】【HTML5】web 存储

    以下为自学笔记内容,仅供参考. 转发请保留原文链接:https://www.cnblogs.com/it-dennis/p/10503539.html 什么是Web存储 cookie最大的缺陷是在每一 ...