Python中和來對URL進行解析的的模組是urlparse.
1.URL解析(Urlparse)
import urlparse
urlstr="https://www.baidu.com/helloword?id=123"
x =urlpars
import urlparse
urlstr="http://www.abc.com/helloword/index.php?id=123"
x =urlparse.urlparse(urlstr)
print "scheme:",x.scheme
print "netloc:",x.netloc
print "path:",x.path
print "params:",x.par
import urlparse
urlstr="http://www.abc.com/helloword/index.php?id=123"
x =urlparse.urlparse(urlstr)
print "scheme:",x.scheme
print "netloc:",x.netloc
print "path:",x.path
print "params:",x.params
print "query:",x.query
print "hostname:",x.hostname
print "port:",x.port
輸出結果:
scheme: http
netloc: www.abc.com
path: /helloword/index.php
params:
query: id=123
hostname: www.abc.com
port: None
屬性 |
含義 |
scheme |
協議 |
netloc |
伺服器位址 |
path |
路徑 |
params |
參數 |
query |
查詢部分 |
username |
使用者名稱 |
password |
密碼 |
hostname |
主機名稱 |
port |
連接埠 |
2.URL拼合(urljoin)
import urlparse
print urlparse.urljoin("http://www.abc.com","1.htm")
輸出結果:
http://www.abc.com/1.htm
在相對URL中如果有協議欄位,則優先使用相對URL中的協議。否則使用絕對URL中的協議欄位。
import urlparse
print urlparse.urljoin("http://www.python.org","ftp://www.python.org")
print urlparse.urljoin("http://www.python.org","www.python.org")
輸出結果:
ftp://www.python.org
http://www.python.org/www.python.org
3.URL的編碼與解碼
方法 |
功能 |
quote |
對URL進行編碼 |
quote_plus |
同quote方法,進一步將空格變成“+” |
unquote |
解碼 |
unquote_plus |
進一步將+變成空格 |
import urllib
print urllib.quote("/~test/")
print urllib.quote_plus("/~test/public html")
輸出結果:
/%7Etest/
%2F%7Etest%2Fpublic+html
4.CGI
公用網關介面(Common Gateway Interface)是外部應用程式和HTTP伺服器之間互動的
一個能通用介面標準。CGI本身不是一種語言,也不是一種網路通訊協定,僅僅定義了HTTP伺服器
和程式之間的交換資訊規範,可以用任何語言書寫。
CGI環境資訊
#遠程IP
import os
remote_addr=os.environ['REMOTE_ADDR']
#擷取當前伺服器中所有啟動並執行CGI變數
import cgi
cgi.print_environ
使用者的輸入:
form = cgi.FieldStorage()
for key in form.keys():
print key,"==>",form[key].value
print "<br>"
http://127.0.0.1/py/1.py?value1=123&value2=123456
擷取HTML資源
import urllib#列印網頁原始碼
docu_text = urllib.urlopen("http://www.baidu.com")
print docu_text.fp.read()
import urllib#二進位 每1024位元組讀取存入test.html
fp = urllib.urlopen("http://www.baidu.com")
op=open("test.html","wb")
n=0
while True:
s = fp.read(1024)
if not s:
break
op.write(s)
n = n + len(s)
fp.close()
op.close()
print "retrieved",n,"bytes from ",fp.url