Python for Infomatics 第13章 网页服务一(译)
注:文章原文为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
Python for Infomatics 第13章 网页服务一(译)的更多相关文章
- Python for Infomatics 第13章 网页服务四(译)
这几天因为其他事务,打断了自己的学习计划,今天继续我的翻译,避免又中途而废. 注:文章原文为Dr. Charles Severance 的 <Python for Informatics> ...
- Python for Infomatics 第13章 网页服务三(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 13.6 应用程序接口API 现 ...
- Python for Infomatics 第13章 网页服务二(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 13.4 JavaScript ...
- #Python学习笔记:1-3章 (基于《python编程,从入门到实践)
第1-3章 这个文档是记录我学习python时一些学习笔记以及一些想法也可以称作复习笔记 第一章:起步这一章主要是从第一个"hello world"程序到python环境的搭建与配 ...
- Python for Infomatics 第12章 网络编程六(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.9 词汇表 Beautif ...
- Python for Infomatics 第12章 网络编程四(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.7 用BeautifulS ...
- Python for Infomatics 第12章 网络编程一(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 本书中的许多例子关注的是读取文件 ...
- Python for Infomatics 第14章 数据库和SQL应用一(译)
14.1 什么是数据库 数据库一种存储结构数据的文件.绝大多数数据库类似字典——映射键和值的关系.最大的区别是数据库是保存在硬盘或其它永久性的存储上,所以在程序结束后它仍然存在.而保存在内存中的字典容 ...
- Python for Infomatics 第12章 网络编程三(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.5 HTML分析和网页抓取 ...
随机推荐
- SQLServer2000数据库的安装
==================. 未完待续,持续更新中... -------------------------------------------------
- fedora 24 使用扇贝网页版没有声音
(扇贝的官方答疑:https://www.shanbay.com/help/faq/no_voice/) 第4步下载MP3测试文件没办法使用: 似乎因为MP3格式的文件是的版权问题. 打算安装能处理M ...
- Linux下如何不停止服务,清空nohup.out文件
tips:最近发现有不少人在百度这个问题,当初如易我也是初学者,随便从网上搜了一下,就转过来了,不过为了避免搜索结果同质化,为大家提供更翔实的参考,我将nohup.out相关知识整理汇总如下: 1.n ...
- Swift 3.0 【Swift 3.0 相较于 Swift 2.2 的变化】
一.编译器和语法变化 函数或方法参数 调用函数或方法时从第一个参数开始就必须指定参数名 在Swift的历史版本中出现过在调用函数时不需要指定任何函数参数(或者从第二个参数开始指定参数名),在调用方法时 ...
- codevs3250 操作序列
题目描述 Description Petya是一个非常好玩孩子.他很无聊,因此他开始玩下面的游戏: 他得到一个长度为N的整数序列,他会对这些数字进行操作,他可以把某个数的数值加1或者减1(当然他可以对 ...
- nyoj 下三角矩阵
Problem A 下三角矩阵 时间限制:1000 ms | 内存限制:65535 KB 描述 给定一个由0和1组成的矩阵.只允许交换相邻的两行,要把矩阵转化成下三角矩阵(主对角线上方的元素都是0 ...
- PHP函数 addslashes() 和 mysql_real_escape_string() 的区别 && SQL宽字节,绕过单引号注入攻击
首先:不要使用 mysql_escape_string(),它已被弃用,请使用 mysql_real_escape_string() 代替它. mysql_real_escape_string() 和 ...
- AJAX工作原理及其优缺点
1.什么是AJAX?AJAX全称为"Asynchronous JavaScript and XML"(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.它 ...
- 我常用的Vi命令
Vi对于linux的重要性和受欢迎的程度在此一律不表.此刻互联网上不少介绍vi的文章和博客,相信写得比我好的也不在少数.然而为什么我依然写这样一篇文章呢?我对linux知识和了解也都来自于互联网,很难 ...
- WCF X.509验证
1.证书的制作 makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=ParkingServer -sky exchange -pe makecert. ...