zoukankan      html  css  js  c++  java
  • 《Using Python to Access Web Data》 Week5 Web Services and XML 课堂笔记

    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)
    
  • 相关阅读:
    DVWA 通关指南:File Upload(文件上传)
    DVWA 通关指南:File Inclusion(文件包含)
    DVWA 通关指南:Command Injection (指令注入)
    DVWA 通关指南:Brute Force (爆破)
    CTF-WEB:Git 源码泄露
    2021.1.16 人月神话阅读笔记01
    2021.1.15 HTML基本知识
    2021.1.13
    2021.1.11
    2021.1.8 GitHub注册
  • 原文地址:https://www.cnblogs.com/IvyWong/p/9751299.html
Copyright © 2011-2022 走看看