urllib包含四個模塊:
- urllib.request——請求處理
- urllib.error——異常處理
- urllib.parse——URL處理
- urllib.robotparse——用來解析頁面的robots.txt文件
我們這裏主要講一下urllib的request模塊裏面對網頁頭信息的處理,我麼一般會用urllib.request.urlopen()來對網頁請求進行獲取,它會返回一個http.client.HTTPResponse類型的對象,並對應有如下方法:
read(),readinto(),getheader(name),getheaders(),fileno()等函數和msg,version、status,reason,debuglevel,closed等屬性。
我們這裏可以調用裏面的getheader()對要下載處理的文件的length進行判斷——getheader('Content-Length'),繼而避免無法下載時打開無用文件,這裏也可以從文件角度出發處理。
類似我們之前QQ音樂爬蟲中的處理:
with open(filename, 'wb') as f:
f.write(res.raw.read())
if(urllib.request.urlopen(url).getheader('Content-Length') > 0):
print("成功下載歌曲:{}".format(name.replace("?", "").replace("/", "_").replace("\\", "_").replace("\"", "")))
# size = urllib.request.urlopen(url).getheader('Content-Length')
# print(size)
else:
print("下載失敗")
os.remove(filename)