python解析xml文件

  • 2019 年 10 月 10 日
  • 筆記

本文目錄:

前言關於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解析源碼。

一番霧語:就像表達是你的情緒的反映一樣,表達方式反之也會影響情緒。