1. 一般頁面
比如 url = 'http://www.baidu.com/'
下載頁面
import urllib.request
url = 'http://www.baidu.com/'
response = urllib.request.urlopen(url=url)
print(response) # <http.client.HTTPResponse object at 0x0000021C8D0A89E8>
print(type(response)) # <class 'http.client.HTTPResponse'>
# 將響應的頁面下載到文件中
# 第二個參數(shù) 'w' 表示寫入文件中的內(nèi)容是字符串格式腥椒,所以要有第3個參數(shù),指定寫入字符串的編碼。默認值是'gbk'环础,網(wǎng)頁編碼在<meta>標簽中查看
with open('baidu_index.html', 'w', encoding='utf8') as fp:
# 寫入文件的要對response對象進行二進制讀取宾巍,之后再以對應編碼進行解碼
fp.write(response.read().decode('utf8'))
如果是要下載圖片這樣的二進制,不能utf8
編碼丈甸,直接以二進制寫入文件
比如 url = 'https://wt4u.top/Upload/img/7.jpg'
import urllib.request
url = 'https://wt4u.top/Upload/img/7.jpg'
response = urllib.request.urlopen(url=url)
# 將響應的頁面下載到文件中
# 第二個參數(shù) 'wb' 不需要第3個參數(shù)
with open('mz7.jpg', 'wb') as fp:
# 寫入的文件是響應的二進制讀取內(nèi)容
fp.write(response.read())
# 這樣就在當前目錄下生成一個mz7.jpg的文件了
2. 有防盜鏈的圖片
有一些網(wǎng)站的圖片有防盜鏈的機制糯俗,比如妹子圖
這樣下載會報 403 Forbidden
的錯誤
防盜鏈是網(wǎng)站檢測請求是否來自于我自己的網(wǎng)站,請求頭中有一個 Referer
參數(shù)
如果要下載睦擂,需要在發(fā)起請求的時候得湘,帶上有 Referer
的請求頭,而 urllib.request.urlopen(url=url)
沒有 headers
參數(shù)
要換成 response = urllib.request.Request(url=url, headers=headers)
創(chuàng)建請求,再 urllib.request.urlopen(response)
發(fā)起請求顿仇,最后 fp.write(content.read())
寫入二進制文件
import urllib.request
url = 'https://wt4u.top/Upload/img/7.jpg'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36',
'Referer': 'http://www.meizitu.com'
}
# 創(chuàng)建請求
response = urllib.request.Request(url=url, headers=headers)
# 發(fā)起請求
content = urllib.request.urlopen(response)
# 下載圖片
with open('01mz71.jpg', 'wb') as fp:
# 寫入的文件是響應的二進制讀取內(nèi)容
fp.write(content.read())
或者換成 requests
模塊的 requests.get(url=url, headers=headers)
方法發(fā)起請求淘正,獲取響應
import requests
url = 'http://mm.chinasareview.com/wp-content/uploads/2017a/08/01/01.jpg'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36',
'Referer': 'http://www.meizitu.com'
}
response = requests.get(url=url, headers=headers)
with open('mzt.jpg', 'wb') as fp:
fp.write(response.content)
# 這樣就會在當前目錄下生成一個mzt.jpg,即為要下載的圖片
3. urllib.request.urlretrieve
此外摆马,urllib.request
有一個更加簡單的下載文件的方法叫
urllib.request.urlretrieve(url,filepath)
import urllib.request
# 下載圖片
url = 'https://wt4u.top/Upload/img/7.jpg'
filepath = './mz70.jpg'
urllib.request.urlretrieve(url,filepath)
# 下載網(wǎng)頁
baidu_url = 'http://www.baidu.com/'
filepath_baidu = './baidu.html'
urllib.request.urlretrieve(baidu_url, filepath_baidu)
4. 【注意】
urlretrieve
方法,因為沒有 headers
參數(shù)鸿吆,無法攜帶Referer
囤采,所以同樣不能用于下載有防盜鏈的圖片。
下載防盜鏈的圖片伞剑,只能用 requests.get(url=url, headers=headers)
,或者
response = urllib.request.Request(url=url, headers=headers)
content = urllib.request.urlopen(response)
如果這篇文章對你有幫助斑唬,不妨點個贊哦
(˙?˙)?--?