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>