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