Coursera/py4inf/access network data 筆記 密歇根大學


https://www.coursera.org/learn/python-network-data

RE
常用到的一些表達式
.  任意字符
*  0次或多次(greedy)
+  1次或多次(greedy)
?  0次和1次(non-greedy)   和*,+一起用的時候
\s whitespace
\S non-whitespace
[^XYZ] 不包含XYZ
[aeiou] 包含
[a-z0-9] range
() 匹配以後真正return的內容

*?,+?是non-greedy,也就是取最短,而不是greedy下的取最長


re.search(reex,line) 返回true/false
re.findAll(reex,line) 返回一個list,裏面所有line裏面和reex匹配的

---------------------------------------------------

獲取網絡上的數據,要通過socket.python有自帶的庫socket library (Transport Layer)

    import socket
    mysocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#prepare a porthole but not connect to anything
    myscoket.connect(host,port)#make a connection

可以比較一下本地open文件和遠程socket的同異


先新建socket,然後和服務器連接。
接着發出GET請求
服務器接收到請求以後解析,獲取對應文件,response給client
瀏覽器展示
關閉socket

    import socket
    mysocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    mysocket.connect(('www.py4inf.com',80))
    mysocket.send('GET http://www.py4inf.com/code/romeo.txt HTTP/1.0\n\n')

    while True:
        data=mysocket.recv(512)
        if(len(data)<1):
            break
        print data

    mysocket.close()

利用socket來實現網絡數據的獲取是比較底層的做法,可以封裝過的urllib    (Application Layer)
    import urllib
    fhand = urllib.urlopen('http://www.py4inf.com/code/romeo.txt')

    for line in fhand:
        print line.strip()

利用BeautifulSoup 來parse HTML
import urllib
from BeautifulSoup import *

url = raw_input('Enter your website:')
fhand = urllib.urlopen(url)
html = fhand.read()
soup = BeautifulSoup(html)

tags=soup('a') #tags is a list
# Each tag is like a dictionary of HTML attributes
for tag in tags: # tag is a BeautifulSoup.Tag object
    print tag.get('href',None)


--------------------------------------

Wire protocol/wire format
通過Net進行數據傳輸之間的交換協議,比如python dict這根線傳來的是什麼數據格式,到哪頭的Java Hashmap又需要什麼格式

serialize 和de-serialize的過程


這裏面有兩種常用的格式:XML和Json
XML更適合document類型的nest things,json就適合JS的list,array,object 以及python的dict

XML是有一系列的tags組成的,類似於HTML。但是XML的屬性都是自己定義的,不需要要滿足HTML的定義,只要有意義即可。
XML的validation一般只有在出現問題的時候使用:xs:complexType,xs:sequence,xs:element ,xs:type,name
XML在python裏面的解析主要是兩個關鍵:
1.import xml.etree.ElementTree as ET
2. tree = ET.fromstring(xmlString) #tree是一個xml.etree.ElementTree.Element
    tree.find().text    tree.find().get()
-----------------------------
JSON 支持list和object
1.import json
2.info = json.loads(data) #出來的是一個dict/list


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章