python2.x 和python3.x 中urllib的區別,並簡單使用
urllb 的常見變化有:
在Python2.x中使用import.urllib2 -----------對應的,在Python3.x中會使用import.urllib.request,urllib.error
在Python2.x中使用import.urllib -----------對應的,在Python3.x中會使用import.urllib.request,urllib.error,urllib.parse
在Python2.x中使用import.urlparse -----------對應的,在Python3.x中會使用import.urllib.parse
在Python2.x中使用import.urlopen-----------對應的,在Python3.x中會使用import.urllib.request.urlopen
在Python2.x中使用import.urlencode-----------對應的,在Python3.x中會使用import.parse.urlencode
在Python2.x中使用import.quote -----------對應的,在Python3.x中會使用import.urllib.request.quote
在Python2.x中使用cookielib.CookieJar -----------對應的,在Python3.x中會使用http.CookieJar
在Python2.x中使用urllib2.Request -----------對應的,在Python3.x中會使用urllib.request.Request
以上,總結了Urllib相關模組中從Python2.x到python3.x的常見的一些變動,如果之前用的是python2.x版本的,依據這個變動關係,可以快速寫出Python3.x的程式.
簡單使用urllib方法:
import urllib.request #如果使用urllib方法,先匯入urllib.request
file = urllib.request.urlopen(‘http://www.baidu.com’) #需要使用urllib.request.urlopen開啟並爬取一個網頁
html = file.read() #讀取全部內容
html = file.readline()#讀取一行內容
注:讀取內容常見的有3種方法:
1> file.read()讀取檔案的全部內容,與readlines不同的屙屎,read會把讀取到的內容賦予一個字串變數
2> flie.readlines() 讀取檔案的全部內容,與read不同的是,readlines會把讀取到的內容賦給一個列表變數,若要讀取全部內容,推薦使用這種方式。
3> Flie.readline() 讀取檔案的一行內容
我們可以使用urllib.request 裡面的urlretrieve()函式直接將對應資訊寫入本地檔案,
格式為:urllib。reqeuest。urlretrieve(url,filename=本地檔案地址)
注:使用urlretrieve儲存,在執行過程中,會產生一些快取,如果想清除這些快取資訊,可以使用urlcleanup()進行清除,輸入一下程式碼即可清除urlretrieve執行所造成的快取:
urllib.request.urlcleanup()
獲取狀態碼:
file.gecode() 如果返回是200說明此響應正確
file.geturl() 獲取當前爬取url地址
如果,url輸入中文或者不符合標準的字元,需要編碼:
urllib.request.quote(‘http://www.baidu.com’)
返回:
‘http%3A//www.baidu.com’
那麼響應的,需要解碼,使用:
urllib.request.unquote(‘http%3A//www.baidu.com’)
返回:
‘http://www.baidu.com’
如何使用代理伺服器:
def use_proxy(proxy_addr,url):
import uellib.request
proxy = urllib.request.ProxyHandler({'http':proxy_addr})
opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
data = urllib.reqeuet.urlopen(url).read().decode('utf-8')
return data
proxy_addr ='202.7.210.22:5555' #輸入有效ip
data = use_proxy(proxy_addr,'http://www.baidu.com')
print(len(data))