Python for Infomatics 第13章 網頁服務一(譯)

来源:http://www.cnblogs.com/zhengsh/archive/2016/04/28/5444085.html
-Advertisement-
Play Games

註:文章原文為Dr. Charles Severance 的 《Python for Informatics》。文中代碼用3.4版改寫,併在本機測試通過。 一旦利用程式通過HTTP協議獲得並分析文檔變得簡單,那麼開發生成一個特殊設計的、供其他程式使用的文檔(不是在瀏覽器中顯示HTML)的方法也不用花 ...


註:文章原文為Dr. Charles Severance 的 《Python for Informatics》。文中代碼用3.4版改寫,併在本機測試通過。

  一旦利用程式通過HTTP協議獲得並分析文檔變得簡單,那麼開發生成一個特殊設計的、供其他程式使用的文檔(不是在瀏覽器中顯示HTML)的方法也不用花太長時間。

  我們使用的通過網頁互換數據的通用格式有這麼兩種:擴展標記語言XML和JSON(見 www.json.org)。XML已經應用多年,最適合互換文檔樣式數據。當程式之間只想互換字典、列表或者其它內部信息,它們使用JSON。我們將審視這兩種格式。

13.1 擴展標記語言-XML

13.1 eXtensible Markup Language - XML

  XML看起來和HTML非常相似,但是XML比HTML更加結構化,下麵是一個XML文檔的示例:
<person>
<name>Chuck</name>
<phone type="intl">
+1 734 303 4456
</phone>
<email hide="yes"/>
</person>

  用結構樹來看待XML往往比較有益。下圖中頂層父標簽是Person,phoned、name是父節點的孩子。

13.2 分析XML  

  下麵是一個從XML中分析並抓取一些元數據的簡單程式:

import xml.etree.ElementTree as ET

data='''
<person>
<name>Chuck</name>
<phone type="intl">
+1 734 303 4456
</phone>
<email hide="yes"/>
</person>'''

tree = ET.fromstring(data)
print('Name:', tree.find('name').text)
print('Attr:', tree.find('email').get('hide'))

  運行代碼的輸出為:

Name: Chuck
Attr: yes

  (譯者註:不要將這個代碼保存為xml.py,不然運行時將程式將報錯:ImportError: No module named 'xml.etree'。因為在引入庫文件時,Python將首先搜索當前目錄,當前目錄下命名為xml.py的文件或包將覆蓋同名的標準庫。)

  調用fromstring將字元串顯示的XML轉換為XML節點樹。當XML在樹中時,我們有一系列的方法可以從XML抽取部分數據。

  find函數搜遍XML樹,並獲取匹配指定標簽的節點。每個節點可以有一些文本,一些屬性(如hide),以及一些子節點。每個節點可以成為樹的根節點。

  當XML如本例一樣非常的簡單時,使用類似ElementTree這樣的XML分析器有很多優勢。事實證明,認定有效的XML有很多規則,使用ElementTree允許我們從XML提取數據而無需擔憂語法規則。

13.3 遍循節點

  XML經常有多個節點,我們必須編寫一個迴圈來處理所有的節點。在下麵的程式中,我們將遍循所有的user節點:

import xml.etree.ElementTree as ET

input = '''
<stuff>
<users>
<user x="2">
<id>001</id>
<name>Chuck</name>
</user>
<user x="7">
<id>009</id>
<name>Brent</name>
</user>
</users>
</stuff>'''

stuff = ET.fromstring(input)
lst = stuff.findall('users/user')
print('User count:', len(lst))

for item in lst:
    print('Name ', item.find('name').text)
    print('Id ', item.find('id').text)
    print('Attribute ', item.get('x'))

  findall方法獲取一個以XML樹方式表示user的子樹列表。然後我們用一個for循序查看每個user節點,並列印出其name和id的文本信息,以及x屬性。

  程式的輸出如下:
User count: 2
Name Chuck
Id 001
Attribute 2
Name Brent
Id 009
Attribute 7
13.4


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 公司最近使用的ORM框架是JPA實現產品使用的是hibernate,曾經看過一篇博客上面說的是如果團隊裡面沒有一個精通hibernate的人,那麼最好不要使用它,我現在是深刻的體會到了。但是使用什麼框架不是我能決定的,如果是我的話,我寧願使用mybatis。吐槽完來講講出現的問題,因為我們項目是一個 ...
  • 準備了好久了,中間斷斷續續看了些資料,也寫了幾個小demo練手,今天正式開始。 因為要模擬debug和release環境,手上資源又很缺,必須把一些已經拼好的圖片進行切割,網路上找了半天倒是有幾個切圖工具,但是實在是把我噁心的不行,裝個工具,默默的在後臺給我裝了4、5個各種亂七八糟的東西。 然後工具 ...
  • 關於字元串 問題描述:一般這類程式設計的題目較簡單,通過設計字元串的反轉,尋找子串,以及字元串的拼接、刪除操作等問題。 問題 實現一個演算法來判斷一個字元串中的字元是否唯一(即沒有重覆)? 設計演算法並寫出代碼移除字元串中重覆的字元(不能使用額外的緩存空間)? 寫一個函數判斷兩個字元串是否是變位詞? 思 ...
  • 我們知道,hibernate並沒有強制要求pojo(實體類 )屬性必須是基本數據類型或者是包裝類,但是我們把屬性聲明為基本數據類型( primitive types directly)或者包裝類 ( wrapping classes for primitives)對我們代碼的編寫有著深遠的影響。 1 ...
  • 問題:在分配管腳後總是出現下麵這個錯誤報告,編譯不過。 Error (171172):Detected confilicting assignments for the following nodes. Error (171173):Node mosi1_io from partition Top ...
  • 當我們需要開發一個方法用來查詢資料庫的時候,往往會遇到這樣一個問題:就是不知道用戶到底會輸入什麼條件,那麼怎麼樣處理sql語句才能讓我們開發的方法不管接受到什麼樣的條件都可以正常工作呢?這時where '1'='1'加上list就可以完美解決這個問題了,廢話少說,上代碼: **註解: 1,以上代碼操 ...
  • 前言 首先是要安裝JDK,JDK安裝好之後,還需要在電腦上配置"JAVA_HOME"、"path"、"classpath"這三個環境變數才能夠把java的開發環境搭建好。在沒安裝過jdk的環境下,path環境變數是系統變數,本來存在的,而JAVA_HOME和classpath是不存在的。 一、配置J ...
  • 函數是一種功能上的抽象,比如當我們寫一段程式,這個程式多次用到了發送郵件的功能(比如說:每天三點固定發送郵件,每當伺服器負載較重發送郵件提醒……),那麼我們就可以將發送郵件這個功能抽象出來,單獨對其定義一個函數進行實現。這樣在需要引用發送郵件功能的時候,我們就不需要重覆複製代碼,直接調用函數就可以了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...