python解析xml文件

本文目录:

前言关于XML解析结语

前言

本来今天准备学习下electron的,结果npm工具的安装真是费了劲,网速差的不得了。为了完成今天的日更,只能放弃,今天来谢谢python的xml解析吧。

昨天我们讲了Charles的安装与使用,而Charles抓到一条数据之后,我们想要把这条数据导出来用脚本分析,那么,Charles提供了导出(export)功能。导出的格式包括.chls/csv/trace/chlsx/chlsj/har格式。这里的chlsx其实就是一种xml格式,里面包含的内容比较全。

关于XML

  • XML是一种可扩展标记语言(eXtensible Markup Language),主要被用来存储数据。
  • XML是一种树状结构,每个节点被称作一个元素,元素有对应的属性(描述)。
<?xml version="1.0" encoding="UTF-8"?>
<body>
  <name>efon</name>
  <sex>male</sex>
  <profession>SW Engineer</profession>
</body>

解析

这里我们还是以抓取公众号文章列表页的一页数据为例。用Charles导出一页chlsx数据。

我们要从这个xml文件里获得Host|Referer|Cookie|url这几个动态信息。

  • 我们用sorted函数排序,找出时间最新的一个chlsx文件。
trace_list = sorted(glob.glob("out/*.chlsx"), key=os.path.getmtime, reverse=True)
  • 这里xml的解析我们用到一个库xml.dom.minidom,首先用parse读取这个xml文件;
  • getElementsByTagName读取元素的内容;
  • firstChild.data读取一个元素的属性(描述);
DOMTree = xml.dom.minidom.parse(trace_list[0])
File = DOMTree.documentElement.getElementsByTagName('first-line')[0].firstChild.data
headers = DOMTree.documentElement.getElementsByTagName("header")
for header in headers:
    names = header.getElementsByTagName('name')
    if (names[0].firstChild.data == 'Host'):
        Host = header.getElementsByTagName('value')[0].firstChild.data
    elif(names[0].firstChild.data == 'Referer'):
        Referer = header.getElementsByTagName('value')[0].firstChild.data
    elif (names[0].firstChild.data == 'Cookie'):
        Cookie = header.getElementsByTagName('value')[0].firstChild.data

结语

好了,通过上面的步骤,我们便可以从xml文件里拿到我们想要的元素属性了。

公众号后台回复 “xml” 获取文中用到的xml文件和python解析源码。

一番雾语:就像表达是你的情绪的反映一样,表达方式反之也会影响情绪。

本文分享自微信公众号 - 一番码客(efonfighting)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Haytham的原创技术文章

《Flask Web开发 基于Python的Web应用开发实战》简评

《Flask Web开发 基于Python的Web应用开发实战》,O'Reilly"动物书系列"的"狗书",应该是很多Flask初学者被推荐使用的入门书,但是这...

9300
来自专栏python-爬虫

重新整理django中Auth模块

一定要在settings.py中告诉Django,我现在使用我新定义的UserInfo表来做用户认证。写法如下:

6610
来自专栏python-爬虫

python中关于空的说法

None他既不是0也不False也不是空的序列也不是空的字典,但是他的布尔类型为False

12130
来自专栏python-爬虫

周末手撸管理系统(一)

12440
来自专栏武培轩的专栏

为什么不建议使用Date,而是使用Java8新的时间和日期API?

在Java 8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,因此建议使用新的时间和日期API,分别从旧的时间和日期的API的缺点以及解决方法、Jav...

20930
来自专栏小蔚记录

常见的 移动端问题

  <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-sc...

7510
来自专栏Python编程技术

Python 最强编辑器详细使用指南

本文假设读者熟悉 Python 开发,且计算机中已安装某个版本的 Python。该教程将使用 Python 3.6 版本,屏幕截图和 demo 均来自 macO...

15100
来自专栏Python数据科学

Python官方最后通牒:Python 2传奇20年将落幕,Python 3接力!

Python官方非常正式的在官网上发表一封公开信,再次强调Python 2将于2020年元旦停止维护!之后,官方将不会再对任何bug、安全漏洞进行任何更新或者修...

8620
来自专栏zingpLiu

python【第五篇】常用模块学习

a.定义:本质就是.py结尾的python文件,逻辑上组织python代码,实现某种功能。例:文件名test.py-->模块名test。

8820
来自专栏Python编程技术

用Python制作一个打字训练小工具

说道程序员,你会想到什么呢?有人认为程序员象征着高薪,有人认为程序员都是死肥宅,还有人想到的则是996和 ICU。

6900

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励