URL的格式通常爲(帶方括號的是可選的):html
protocol://hostname[:port]/path/[;parameters][?query]#fragmentpython
URL由三部分組成:小程序
第一部分是協議:http https ftp file ed2k瀏覽器
第二部分是存放資源的放武器的域名系統或IP地址(有時候要包含端口號)服務器
各類傳輸協議都有默認的端口號,http的默認端口號就是80網絡
第三部分是資源的具體地址,如目錄或文件名等數據結構
python3.0版本以後就把urllib和urllib2合併了,變爲一個urllib包函數
下面先用urllib.request寫個小程序post
import urllib.request編碼
wangye = urllib.request.urlopen('http://www.baidu.com')
html=wangye.read()
print (html)
##輸出的全是亂碼是否是 ,由於他是二進制的格式
import urllib.request
wangye = urllib.request.urlopen('http://www.baidu.com')
html=wangye.read()
html=html.decode('utf-8')
print (html)
##這就轉化爲你在瀏覽器的網頁裏面按F12的效果,是他們的源代碼
1、抓取一隻貓
import urllib.request
wangye=urllib.request.urlopen('http://placekitten.com/g/500/500')
cat_img = wangye.read()
with open('cat_500_600'+'.jpg','wb') as f:
f.write(cat_img)
#reques有兩種用法 一種是'urlopen'後面加上網址,另一種是urllib.request.Request加上網址
import urllib.request
pro_wangye=urllib.request.Request('http://placekitten.com/g/500/500')
wangye=urllib.request.open(pro_wangye)
cat_img = wangye.read()
with open('cat_500_600'+'.jpg','wb') as f:
f.write(cat_img)
因此直接用urlopen就好
2、一些函數
wangye.geturl() #輸出的是http://placekitten.com/g/500/500
print(wangye.info()) #輸出一堆網絡的屬性什麼的
wangye.getcode() #若是輸出200說明服務器狀態沒問題,正常相應
3、在編一個小程序:有道翻譯
注意:
一、這個urlopen有個參數data,若是其被賦值,則函數就會post,來取代get
二、data的格式必須是特定的,須要使用:urllib.parse.urlencode()進行一下編碼,編譯成url的格式
並且這個urllib.parse是一個模塊的 須要載入
4、一些知識點
remote address:服務器ip地址+打開的端口號
request url:打開的地址
status code:服務器的狀態,200是正常,404是頁面不見了
request header:客戶端、瀏覽器的意思 #通常經過這個裏面的users-agent來判斷是代碼訪問仍是人的訪問
使用: 一、req=urllib.request.Request(url,data,header) #提早寫好header,這是個字典
或者使用:二、req=urllib.request.Request(url,data)
req.add_header('UserAgent','Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36')
JSON:這是一種輕量級的數據交換格式,說白了就是這裏就是字符串把Python的數據結構封裝起來,便於儲存和使用
HTTP有好幾種方法(GET、POST、PUT、HEAD、DELETE、OPTIONS、CONNECT),請問如何知道python使用的哪種:
答:使用get_method()方法獲取request對象具體使用那種方法訪問服務器,當request的Data參數被賦值的時候,get_method()返回的'POST',不然返回'GET'