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