Skip to content

HTML

HTML(超文本标记语言)是一种标记语言,用于创建网页和Web应用程序。通过HTML,我们可以创建自己的静态页面。它用于显示数据,而不是传输数据
HTML是超文本和标记语言的组合。超文本定义了网页之间的链接。标记语言用于定义标记内的文本文档,该文档定义网页的结构。此语言用于注释(为计算机做笔记)文本,以便机器可以理解它并相应地操作文本。

HTML解析

可以参考之前在csdn上写的博客,因为BeautifulSoup已经支持lxml解析,它与lxml速度差不多。BeautifulSoup可以使用Find方法和CSS选择器提取数据,lxml使用XPath和CSS选择器提取数据。
BeautifulSoup解析库处理HTML
lxml解析库处理HTML及Xpath路径

XML

XML(可扩展标记语言)也用于创建网页和Web应用程序;它是动态的,因为它用于传输数据而不是用于显示数据
XML的设计目标关注于Internet上的简单性、通用性和可用性。它是一种文本数据格式,通过Unicode对不同的人类语言提供了强大的支持。虽然XML的设计主要关注文档,但是这种语言广泛用于表示任意数据结构,比如web服务中使用的数据结构。

XML解析

Python解析XML的常用方法有以下几种:
1、DOM解析,xml.dom模块。
2、SAX解析,xml.sax模块。
3、ET解析,xml.etree.ElementTree模块。
4、lxml解析并结合XPath提取元素。

使用的是kaggle的道路标志检测数据集,下载后annotations文件夹中的第一个road0.xml文件。数据集链接

ET解析代码:

import xml.etree.ElementTree as ET


f = open(r'D:\python\deep_learning\picture_data\archive\annotations\road0.xml')
tree = ET.parse(f)  #对xml文件进行解析,返回一个ElementTree对象
root = tree.getroot()  #获取ElementTree的根节点
print(root.tag)      #查看根节点标签
print(root.attrib)   #查看标签属性,比如<country name="Liechtenstein">中的name属性
#得到第一个匹配size标签的Element对象,如果有多个size可以用findall得到Element对象的list集合
size_img = tree.find('size') 
#打印具体的width,height,depth值  
for size_tag in size_img:
    print(size_tag.text)
# print(list(root.iter()))  #打印所有节点,包括子节点以及子节点的字节点
for child in root:
    for node in child:
        print(node.tag,node.text)
# 指定到最终属性进行查找
print(root.find('./size/width').text)
annotation

{}

267
400
3

width 267
height 400
depth 3
name trafficlight
pose Unspecified
truncated 0
occluded 0
difficult 0
bndbox

267

lxml解析:

from lxml import etree   
parser = etree.XMLParser(encoding='utf-8')   #定义解析器
a = etree.parse(r'D:\python\deep_learning\picture_data\archive\annotations\road0.xml',parser=parser)
res = etree.tostring(a)     # tostring()中有一个method参数,当method='text'返回全部文本内容
print(res.decode('utf-8'))  #进一步解码,显示出xml文本
<annotation>
    <folder>images</folder>
    <filename>road0.png</filename>
    <size>
        <width>267</width>
        <height>400</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object>
        <name>trafficlight</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <occluded>0</occluded>
        <difficult>0</difficult>
        <bndbox>
            <xmin>98</xmin>
            <ymin>62</ymin>
            <xmax>208</xmax>
            <ymax>232</ymax>
        </bndbox>
    </object>
</annotation>

HTML和XML区别
xml参考