本文作者:張 宇
文字編輯:餘術玲
技術總編:張 邯
重磅!!!爬蟲俱樂部將於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分析數據的問題,可以在公眾號中提出,只需支付少量賞金,我們會在後期的推文裡給予解答。