简介

在一些项目中可能会使用到解析html文件,尤其是爬虫相关的,需要解析获取到的html内容,通常我们会使用lxml模块去进行html文件的解析。

html文件

当前存在一个简单的html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="test">
<ul class="ul-list">
<li class="li-test">li-text</li>
<li class="li-test">li-text2</li>
<li class="li-test">li-text3</li>
<li class="li-test">li-text4</li>
</ul>
<ul class="ul-list2">
<li class="li-test">li-text</li>
<li class="li-test">li-text2</li>
<li class="li-test">li-text3</li>
<li class="li-test">li-text4</li>
</ul>
</div>
</body>
</html>

获取html中的部分标签的属性及内容

from lxml import etree
import pathlib html_path = pathlib.Path(__file__).parent.joinpath("test.html")
html = etree.parse(html_path, parser=etree.HTMLParser())
# xpath定位元素,此处为获取div class属性为test下面的所有class属性为ul-list的ul下面的class属性为li-test的所有li元素
content = html.xpath("//div[@class='test']/ul[@class='ul-list']/li[@class='li-test']")
for item in content:
# 获取标签的名称
print(item.tag)
# 获取标签中间的文本内容
print(item.text)
# 获取标签的所有属性,以字典形式返回
print(item.attrib)
li
li-text
{'class': 'li-test'}
li
li-text2
{'class': 'li-test'}
li
li-text3
{'class': 'li-test'}
li
li-text4
{'class': 'li-test'}

xml文件

存在如下xml文件

<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<HTMLCodeStyleSettings>
<option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" />
<option name="HTML_ENFORCE_QUOTES" value="true" />
</HTMLCodeStyleSettings>
<JSCodeStyleSettings version="0">
<option name="FORCE_SEMICOLON_STYLE" value="true" />
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
<option name="FORCE_QUOTE_STYlE" value="true" />
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
<option name="SPACES_WITHIN_IMPORTS" value="true" />
</JSCodeStyleSettings>
<TypeScriptCodeStyleSettings version="0">
<option name="FORCE_SEMICOLON_STYLE" value="true" />
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
<option name="FORCE_QUOTE_STYlE" value="true" />
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
<option name="SPACES_WITHIN_IMPORTS" value="true" />
</TypeScriptCodeStyleSettings>
<VueCodeStyleSettings>
<option name="INTERPOLATION_NEW_LINE_AFTER_START_DELIMITER" value="false" />
<option name="INTERPOLATION_NEW_LINE_BEFORE_END_DELIMITER" value="false" />
</VueCodeStyleSettings>
<codeStyleSettings language="HTML">
<option name="SOFT_MARGINS" value="100" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JavaScript">
<option name="SOFT_MARGINS" value="100" />
</codeStyleSettings>
<codeStyleSettings language="TypeScript">
<option name="SOFT_MARGINS" value="100" />
</codeStyleSettings>
<codeStyleSettings language="Vue">
<option name="SOFT_MARGINS" value="100" />
<indentOptions>
<option name="INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="4" />
</indentOptions>
</codeStyleSettings>
</code_scheme>
</component>

获取xml中的部分标签的属性及内容

from lxml import etree
import pathlib xml_path = pathlib.Path(__file__).parent.joinpath("test.xml")
html = etree.parse(xml_path, parser=etree.XMLParser())
content = html.xpath(
"/component[@name='ProjectCodeStyleConfiguration']/ \
code_scheme[@name]/HTMLCodeStyleSettings//option"
)
for item in content:
# 获取标签的名称
print(item.tag)
# 获取标签中间的文本内容
print(item.text)
# 获取标签的所有属性,以字典形式返回
print(item.attrib)
option
None
{'name': 'HTML_SPACE_INSIDE_EMPTY_TAG', 'value': 'true'}
option
None
{'name': 'HTML_ENFORCE_QUOTES', 'value': 'true'}

与html解析类似,主要是对于xpath语法的熟悉

补充

以上均需要xpath语法支撑,详细可见:xpath语法

python 操作xml、html文件的更多相关文章

  1. 使用python操作XML增删改查

    使用python操作XML增删改查 什么是XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输 ...

  2. python操作xml文件

    一.什么是xml? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. abc.xml <?xml version="1.0&q ...

  3. 三十二、python操作XML文件

    '''XML:模块 xml总结 1.解析 str 文件 tree,ElementTree,type root,Element,type2.操作 Element: tag,text,find,iter, ...

  4. 如何用python操作XML文件

    备注: 基于python3 背景:在统计覆盖率的时候希望绕属性name为test的节点 具体实现源码如下所示,基本都是基于节点属性操作的,当然也就可以基于tag等其他标签去做,可根据需要调整 from ...

  5. Python 操作 MS Excel 文件

    利用 Python 对 Excel 文件进行操作需要使用第三方库: openpyxl,可执行 pip install openpyxl 进行安装 1. 导入 openpyxl 模块 导入 openpy ...

  6. python操作haproxy.cfg文件

    需求 1.查 输入:www.oldboy.org 获取当前backend下的所有记录 2.新建 输入: arg = { 'bakend': 'www.oldboy.org', 'record':{ ' ...

  7. python操作excel表格文件--使用xlrd模块

    原文: http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html 引言: 实际工作中,可能很多情况下都会用到excel表格,像如果不需 ...

  8. python操作上级子文件

    . └── folder ├── data │ └── data.txt └── test1 └── test2 └── test.py import os '***获取当前目录***'print o ...

  9. Python实现XML的操作

    本文从以下两个方面, 用Python实现XML的操作: 一. minidom写入XML示例1 二. minidom写入XML示例2 三. ElementTree写入/修改示例 四. ElementTr ...

随机推荐

  1. Flask01 第一个flask项目

    参考地址:https://github.com/miguelgrinberg/microblog/tree/v0.1 flask环境[苹果M1] 添加虚拟环境 python3 -m venv venv ...

  2. Redis 为何使用近似 LRU 算法淘汰数据,而不是真实 LRU?

    在<Redis 数据缓存满了怎么办?>我们知道 Redis 缓存满了之后能通过淘汰策略删除数据腾出空间给新数据. 淘汰策略如下所示: 设置过期时间的 key volatile-ttl.vo ...

  3. python常用标准库(math数学模块和random随机模块)

    常用的标准库 数学模块 import math ceil -- 上取整 对一个数向上取整(进一法),取相邻最近的两个整数的最大值. import math res = math.ceil(4.1) p ...

  4. 好客租房33-事件绑定this指向(总结)

    1推荐使用class的实例方法 //导入react import React from 'react'   import ReactDOM from 'react-dom' //导入组件   // 约 ...

  5. Android shape与selector标签使用

    原文地址:Android shape与selector标签使用 Android中提供一种xml的方式,让我们可以自由地定义背景,比较常用的就是shape标签和selector标签 shape shap ...

  6. 报‘galleryElements’

    是因为组件的data(){ //没有return{ }引起的 }

  7. 学习Linux须知1.2之Linux命令的实战

    (一)学习Linux 的准备工作 1.在线学习linux 学习网站推荐:Linux 基础入门_Linux - 蓝桥云课 (lanqiao.cn) 2.连接远程服务器学习[下文的案例就是使用xshell ...

  8. Redis(1)- Redis数据库的安装和配置

    1.Redis安装 1.1.Linux环境安装Redis step-1:下载Redis 进入官网找到下载地址 https://redis.io/download wget https://github ...

  9. mac安装java环境

    1.java安装包获取: 链接:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 2.验证安装是否成 ...

  10. ML第5周学习小结

    本周收获 总结一下本周学习内容: 1.学习了<深入浅出Pandas>的第五章:Pandas高级操作的两个内容 数据迭代 函数应用 我的博客链接: pandas:数据迭代.函数应用 2.&l ...