Coursera课程《Using Python to Access Web Data》 密歇根大学

Week5 Web Services and XML

13.1 Data on the Web

在网络上我们需要用一种固定的模板进行交流,python将我们的内容serialize成这种模板,然后再de-serialize让另外一种语言读懂。

现在有两种交流模板:XMLJSON

13.2 Extensible Markup Language(XML)

XML也就是可扩展标记语言(Extensible Markup Language),很类似HTML。

<people>
<person>
<name>Chuck</name>
<phone>303 4456</phone>
</person>
<person>
<name>Noah</name>
<phone>622 7421</phone>
</person>
</people>

和HTML一样,它有start tag和end tag。

<name>Chuck</name>这种叫Simple Element,<person></person>这种叫Complex Element。

而对于XML来说,空格和缩进并不是很有关系。缩进仅仅是为了更好的阅读。

XML的术语

  • 标签(Tag)表示元素的起始。
  • 属性(Attribute)- 在XML的开放标签中的关键词或值
  • Serialize/De-Serialize - 将数据从一种程序转换到一种通用模板中的过程

XML是树形结构的。

所以我们如果要把XML解析为路径。上图中的结果就是。

/a/b为X,/a/c/d为Y,/a/c/e为Z。

13.3 XML Schema

XML纲要描述了一个合法的XML文档的模板。

目前有很多种XML纲要语言,比如说Document Type Definition(DTD), Standard Generalized Markup Language(ISO 8879:1986 SGML), XML Schema from W3C - (XSD)

以下就是XSD的结构。

XSD的限制。

比如说上图的蓝色部分,minOccurs="1" maxOccurs="1"意思就是这个tag只能出现一次,而且必须出现一次。而橙色部分minOccurs="0" maxOccurs="10"也就是说,这个tag可以出现大于等于0小于等于10次。

XSD的数据类型有string, date, date Time, decimal, integer五种类型。

13.4 Parsing XML

import xml.etree.ElementTree as ET
data = '''<person>
<name>Chuck</name>
<phone type="int1">
+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'))

fromstring()这个函数是把XML组织成树状结构,方便后面使用find()查找。

以下是更复杂的一个XML文档情况。

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"))

作业代码

import urllib.request, urllib.parse, urllib.error
import xml.etree.ElementTree as ET url = input('Enter location: ')
print('Retrieving', url)
uh = urllib.request.urlopen(url)
data = uh.read()
print('Retrieved', len(data), 'characters')
tree = ET.fromstring(data) results = tree.findall('comments/comment')
sum = 0
count = 0
for item in results:
sum = sum + int(item.find('count').text)
count += 1 print('count:',count)
print('sum:',sum)

《Using Python to Access Web Data》 Week5 Web Services and XML 课堂笔记的更多相关文章

  1. 《Using Python to Access Web Data》 Week3 Networks and Sockets 课堂笔记

    Coursera课程<Using Python to Access Web Data> 密歇根大学 Week3 Networks and Sockets 12.1 Networked Te ...

  2. 潭州课堂25班:Ph201805201 WEB 之 页面编写 第三课 (课堂笔记)

    index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  3. Python Web-第二周-正则表达式(Using Python to Access Web Data)

    0.课程地址与说明 1.课程地址:https://www.coursera.org/learn/python-network-data/home/welcome 2.课程全名:Using Python ...

  4. 【Python学习笔记】Coursera课程《Using Python to Access Web Data》 密歇根大学 Charles Severance——Week6 JSON and the REST Architecture课堂笔记

    Coursera课程<Using Python to Access Web Data> 密歇根大学 Week6 JSON and the REST Architecture 13.5 Ja ...

  5. 【Python学习笔记】Coursera课程《Using Python to Access Web Data 》 密歇根大学 Charles Severance——Week2 Regular Expressions课堂笔记

    Coursera课程<Using Python to Access Web Data > 密歇根大学 Charles Severance Week2 Regular Expressions ...

  6. 《Using Python to Access Web Data》Week4 Programs that Surf the Web 课堂笔记

    Coursera课程<Using Python to Access Web Data> 密歇根大学 Week4 Programs that Surf the Web 12.3 Unicod ...

  7. [Project] Simulate HTTP Post Request to obtain data from Web Page by using Python Scrapy Framework

    1. Background Though it's always difficult to give child a perfect name, parent never give up trying ...

  8. 利用 NGINX 最大化 Python 性能,第一部分:Web 服务和缓存

    [编者按]本文主要介绍 nginx 的主要功能以及如何通过 NGINX 优化 Python 应用性能.本文系国内 ITOM 管理平台 OneAPM 编译呈现. Python 的著名之处在于使用简单方便 ...

  9. python 全栈开发,Day66(web应用,http协议简介,web框架)

    一.web应用 web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件.应用程序有两种模式C/S.B/S.C/S是客户端 ...

随机推荐

  1. ipcs - 提供基于 ipc (Inter-process communication)结构的信息

    总览 ipcrm [ shm | msg | sem ] id 描述 ipcrm 将删除指定的资源--指定 id.

  2. threading.local作用及原理

    先看下应用: import threading from threading import local import time obj = local() def task(i): obj.xxxxx ...

  3. outlook 使用临时邮箱 使用旧数据

    控制面板-->邮件32位 显示配置文件 删除再添加 具体可参考 https://blog.csdn.net/liuyukuan/article/details/80043840 偷懒,图片从网上 ...

  4. jumpserver部署1.0版本

    A. jumpserver概述 跳板机概述: 跳板机就是一台服务器,开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作: 跳板机缺点:没有实现对运维人员操作行为的 ...

  5. Shiro(一)

    1 权限管理 1.1 什么是权限管理? 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问权限的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自 ...

  6. CodeForces-721A-One-dimensional Japanese Crossword

    链接: https://vjudge.net/problem/CodeForces-721A 题意: Recently Adaltik discovered japanese crosswords. ...

  7. C#调用Python(二)

    python文件中有引入其他包.模块 一.源码 1.1  python源码,源码.python 打包方法,以及打包后的程序文件.请移步https://www.cnblogs.com/zhuanjiao ...

  8. 2019JAVA最新课程-React从入门到实战(新)

    1.准备工作 可以在yunp.top网站看webpack,node/npm,cnpm的相关使用视频教程 react有两种使用方式,一是在现有网站中添加:二是创建一个全新的 官网创建全新一个react ...

  9. antd不可选择时间

    //不能选择今天之前的日期<DatePicker format={this.timeFormat} showTime placeholder="项目结束日期" disable ...

  10. DNS预读取 dns-prefetch 提升页面载入速度

    DNS Prefetch,即DNS预获取,是前端优化的一部分.一般来说,在前端优化中与 DNS 有关的有两点: 一个是减少DNS的请求次数,另一个就是进行DNS预获取 . DNS 作为互联网的基础协议 ...