解析XML文件

2021-02-15 Stata and Python數據分析

本文作者:張   宇

文字編輯:餘術玲

技術總編:張   邯 

重磅!!!爬蟲俱樂部將於2019年10月2日至10月5日在湖北武漢舉行Python編程技術培訓,本次培訓採用理論與案例相結合的方式,旨在幫助零基礎學員輕鬆入門Python,由淺入深學習和掌握Python編程技術,尤其是爬蟲技術和文本分析技術。該培訓目前在火熱招生中,點擊《爬蟲俱樂部2019十一Python編程技術培訓報名啦!》或點擊文末閱讀原文,了解培訓詳細信息,抓緊時間報名吧!XML是由全球資訊網聯盟(W3C)創建的標記語言,被設計用來傳輸和存儲數據,XML可以自行定義標籤,具有自我描述性,其設計宗旨是傳輸數據,而非顯示數據。Python自帶XML模塊,方便開發者解析XML數據。XML模塊中包含了廣泛使用的API接口---SAX和DOM等。另外,lxml解析庫同樣支持HTML和XML的解析,而且支持XPath解析方式。總的來說,Python解析XML的常用方法有以下幾種:3、ET解析,xml.etree.ElementTree模塊。由於第四種方法是我們在網絡爬蟲時解析html經常用到的,也是我們較為熟悉的,所以首先嘗試用它來解析xml,另外三種方法也將陸續介紹。我們使用sublime編輯器編輯一個名為test的xml文件,將其存儲在D盤。具體文件內容如下圖所示:

可以看到,XML文件中存儲的是爬蟲俱樂部近期將要舉辦的stata培訓的信息。但是,XML僅僅在存儲數據的時候非常方便,其在展示數據的時候則顯得捉襟見肘。下面,我們將簡單介紹XPath語法,並結合lxml將XML文件中的信息數據解析出來。

二、XPath語法簡單介紹

XPath是一門在XML文檔中查找信息的語言,Xpath通過路徑表達式在XML文檔中進行導航。在XPath中,有七種類型的節點:元素、屬性、文本、命名空間、處理指令、注釋以及文檔(根)節點,以下作簡單介紹。

XML元素使用XML標籤進行定義,標籤就是<head>、<body>、<table>等被尖括號「<」和「>」包起來的對象,絕大部分的標籤都是成對出現的,如<table></table>。元素則包括開始標籤、結束標籤以及裡面的內容,如」<to>students</to>」就是元素。頁面中的所有內容都是節點,在上面的例子中,「<train>」是文檔(根)節點;「price="物超所值!!!"」則為屬性(節點);「中國武漢」則是文本(節點)。同時,「<location>中國 武漢</location>」和「<to>students</to>」同為<train>的子孫元素,而「<location>中國 武漢</location>」則是「<body>」的直接子元素。

上述為XPath的一些基礎概念,而XPath的常用語法如下(下面用到的div和body都是標籤名):3、//div//body:獲取所有div標籤裡所有的body標籤。4、//div[@price]:獲取含有price屬性的div標籤。5、//div[@price = 10]:獲取prices屬性等於10的div標籤。6、//div/@price:獲取div標籤的屬性。7、//div/text():獲取div標籤的文本。關於XPath的專門介紹請關注爬蟲俱樂部後續推文。
parser = etree.XMLParser(encoding = "utf-8")

tree = etree.parse(r"D:/test.xml",parser = parser)print(etree.tostring(tree,encoding = 'utf-8').decode('utf-8'))

可以發現,我們成功將XML文件的全部內容解析出來。(1)此次培訓是python培訓還是stata培訓?
name = tree.xpath("//heading/text()")[0]  print(name)

time = tree.xpath("//body/time/text()")[0] print(time)

location = tree.xpath("//location/text()")[0]print(location)

price = tree.xpath("//body/@price")[0]print(price)

以上就是我們結合xpath和lxml解析XML的過程,此方法同樣適用於網絡爬蟲中解析html,希望對大家有所幫助。


對爬蟲俱樂部的推文累計打賞超過1000元我們即可給您開具發票,發票類別為「諮詢費」。用心做事,只為做您更貼心的小爬蟲!

往期推文推薦

        命令更新之 reg2docx:將回歸結果輸出到word

命令更新之t2docx——報告分組均值t檢驗

爬蟲俱樂部2019十一Python編程技術培訓報名啦!

數據類型——Dict、Set與Frozenset簡析

數據類型介紹——tuple、list和range對象

把pdf文件批量轉成docx文件

格式化字符串方法的比較

        朝花夕拾—— 如何輸出內存中的矩陣與繪圖

        Stata16新功能——定義圖形元素的絕對大小

        將數值型計算「一網打盡」——(1)

        Stata16新功能之「框架」——讀入多個數據集(1)

       手持Python,鬥圖不輸!

       朝花夕拾——cnstock與cntrade強強聯合

   

關於我們

微信公眾號「爬蟲俱樂部」分享實用的stata命令,歡迎轉載、打賞。爬蟲俱樂部是由李春濤教授領導下的研究生及本科生組成的大數據分析和數據挖掘團隊。

此外,歡迎大家踴躍投稿,介紹一些關於stata的數據處理和分析技巧。

投稿郵箱:statatraining@163.com

投稿要求:
1)必須原創,禁止抄襲;
2)必須準確,詳細,有例子,有截圖;
注意事項:
1)所有投稿都會經過本公眾號運營團隊成員的審核,審核通過才可錄用,一經錄用,會在該推文裡為作者署名,並有賞金分成。
2)郵件請註明投稿,郵件名稱為「投稿+推文名稱」。
3)應廣大讀者要求,現開通有償問答服務,如果大家遇到關於stata分析數據的問題,可以在公眾號中提出,只需支付少量賞金,我們會在後期的推文裡給予解答。

相關焦點

  • Java文件操作——XML文件的讀取
    XML文件的表現:以「.xml」為文件擴展名的文件;存儲結構:樹形結構; 節點名稱區分大小寫。答案就是我們要學習的XML文件。我們可以使用相同的xml把不同的文件聯繫起來 DOM、SAX :java 官方方式,不需要下載jar包DOM4J、JDOM :第三方,需要網上下載jar包示例:解析XML文件,目標是解析XML文件後,Java程序能夠得到xml文件的所有數據思考:如何在Java程序中保留xml數據的結構?
  • xml及json解析
    •org.xml.sax:提供SAX方式解析XML的標準接口•javax.xml:提供了解析XML文檔的類而javax.xml.parsers包中,定義了幾個工廠類。•解析器採用SAX方式在解析某個XML文檔時,它只要解析到XML文檔的一個組成部分,都會去調用事件處理器的一個方法,解析器在調用事件處理器的方法時,會把當前解析到的xml文件內容作為方法的參數傳遞給事件處理器。
  • python3 讀取XML文件的入坑經歷
    需要讀取xml裡的路徑,依次處理圖片所以,開始python xml文件的操作開始時使用命令行的形式,讀取xml文件的路徑,然後判斷文件是否存在,存在,就解析。else: xml_file_path = '' print("xml path not exist!") 問題分析命令行參數傳錯了,xml_file_path = sys.argv[1],才是傳入的xml文件的路徑,如果是sys.argv[0],那麼,是執行的python文件本身!!所以,文件存在,但是,文件解析失敗!!
  • Mybatis中mapper的xml解析詳解
    基礎介紹回顧下之前是在分析configuration的初始化過程,已經進行到了最後一步mapperElement(root.evalNode("mappers")),這個方法裡有兩種解析mapper的方法,一種是解析類,一種是解析xml文件,上一篇文章在講解析類中的註解,今天說到的就是解析xml
  • 【乾貨】Xml文件約束規則使用詳解
    ELEMENT 電話 (#PCDATA)>XML文件:<?xml version = "1.0" encoding = "utf-8" ?><!C)使用注意事項1.Schema文件自身就是一個XML文件,但它的擴展名通常為.xsd。2.一個Schema文檔通常稱之為模式文檔(約束文檔),遵循這個文檔書寫的xml文件稱之為實例文檔。3和XML文件一樣,一個Schema文檔也必須有一個根結點,但這個根結點的名稱為Schema。
  • XML入門精解之文件格式定義
    」屬性的值重複了,這樣,在解析過程中將會出現錯誤信息。此屬性設定中的屬性內定值為#REQUIRED,表示這個屬性在XML文件的〈姓名〉標記中必須出現,否則解析會發生錯誤。〈!ATTLIST 電話號碼 國家代碼 CDATA #FIX "86"〉該屬性設定是為「電話號碼」這個元素設定一個名為「國家代碼」的屬性,該屬性的值是一般的文字。
  • 每日一課 | Python –讀取XML文件(DOM示例)
    在此示例中,我們將向您展示如何通過Python xml.dom.minidom
  • [快學Python3]XML解析處理 - Element Tree
    概述本文就是python xml解析進行講解,在python中解析xml有很多種方法,本文通過實例來講解如何使用ElementTree來解析xml。對於其他的xml解析方法,請自行去查找資料。ElementTreeElementTree是Python提供解析xml的標準庫,ElementTree中每個節點(即Element)具有如下屬性:註:Element類型是一種靈活的容器對象,用於在內存中存儲結構化數據。
  • 靈活調用xsl來解析xml文檔(js異步)
    hello.xml(注意:我的xml文檔中並沒有指定對應的xsl解析文件名)以下是引用片段:<?xml version='1.0'?文檔只有純粹的數據,如果需要顯示到html頁面中的話,一般需要使用定製的xsl文檔來解析,或者手工通過js來讀取xml中的值顯示到html中的dom樹中,當使用xsl文檔來解析時,相應的xml文檔中必須指定對應的xsl文檔才能正常顯示,但當有些程序動態輸出xml文檔時,並沒有指定相應的xsl文檔,這時就必須通過其它途徑來加載相應的xsl文檔來解析,當然,在伺服器端輸出xml文檔時,通過一些xml api
  • 「黑馬程式設計師」Dom4J解析XML的範例淺析
    前言XML是可擴展標記語言的縮寫,在編程領域是非常常用的,我們經常會用它進行數據的傳輸或者用作配置文件,那麼對XML的操作的也會是我們需要掌握的一項技術,本文會使用Java語言,利用DOM4J這個非常優秀的開源庫,探討生成XML格式數據和解析XML數據的兩個方面的問題。
  • Web傳輸和存儲數據結構化,xml可輕鬆實現,用Python如何解析它?
    我們知道,在Web傳輸過程中有很多結構化數據,xml就是其中的一種。它以其簡單、易理解和結構化而著稱,雖然在數據傳輸過程中它佔用的空間要比二進位數據多,但它的可讀性和簡單的組織結構卻是二進位文件不能比較的。
  • 實例:NStarfaiNet的SQL XML文件示範
    首頁 > 語言 > 關鍵詞 > XML最新資訊 > 正文 實例:NStarfaiNet的SQL XML文件示範
  • AndroidManifest.xml文件安全探索
    文件的作用和架構,並研究了AndroidManifest.xml配置文件存在的一些漏洞,在進行安全檢測時,可以對症下藥。AndroidManifest.xml 存放在 app/src/main/ 目錄下。在反編譯APK文件後,其文件是以亂碼格式存在,需要進行轉換才能正常查看。
  • java_bean XMLDecoder
    弱弱說,有點水,跟到後面懶得跟了23333333二、準備idea 起一個調試Demo,jdk 1.8.20package xmldecoder;import java.beans.XMLDecoder;import java.beans.XMLEncoder;import java.io.IOException
  • SAX PULL DOCUMENT解析XML總結
    2、調用,用SAXParser或者XMLReader來解析SAXParser解析SAXHandlerParseService saxForHandler = newSAXHandlerParseService();SAXParserFactory spf = SAXParserFactory.newInstance();
  • 文庫 | XML外部實體注入總結(XXE)
    XML數據時,解析了攻擊者偽造的外部實體而產生的。而libxml版本在2.9.1及以後,默認不解析外部實體,很多利用將無法實現。文件讀取<?xml version="1.0" encoding="utf-8"?><!DOCTYPE xxe [<!ELEMENT name ANY ><!
  • Ruby XML, XSLT 和 XPath 教程
    可擴展標記語言,標準通用標記語言的子集,一種用於標記電子文件使其具有結構性的標記語言。它可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。它非常適合全球資訊網傳輸,提供統一的方法來描述和交換獨立於應用程式或供應商的結構化數據。
  • 利用XMLBean輕輕鬆鬆讀寫XML
    一、關於XML解析XML在Java應用程式裡變得越來越重要, 廣泛應用於數據存儲和交換. 比如我們常見的配置文件,都是以XML方式存儲的.Java提供了SAX和DOM兩種方式用於解析XML,但即便如此,要讀寫一個稍微複雜的XML,也不是一件容易的事.
  • 如何從xml文件創建R語言數據框dataframe
    p=16788 問題重現 軟體:R語言環境:windows問題描述:我有一個XML文檔文件。文件的一部分如下所示:<?xml version="1.0" encoding="UTF-8"?gt;<ID>MA</ID><Name>Machines</Name></SubCategory><SubCategory><ID>CO</ID><Name>Copiers</Name></SubCategory></List>從這個XML文件中
  • 辦公室文員到開發人員的過渡,用Python將Excel轉化為xml文檔格式
    上一篇內容我們通過一個例子詳解了Python解析xml文檔的方法(參見()方法來進行xml文件的讀寫操作。etree模塊處理機制我們在上篇解析中提到了xml文件的解析,解析之前肯定要先讀取了,但是上篇內容並沒有很好的做出說明。今天我們來詳細梳理下:接觸過Linux的小夥伴肯定知道,Linux文件系統結構就像一個倒立的樹形結構,這種結構的優點是層次清晰,便於檢索和操作文件。