我們知道,使用Python制作一個爬蟲程序,requests庫是一個不錯的選擇,requests發(fā)送網(wǎng)絡(luò)請求非常簡單,比較使用urllib庫,使用requests庫可以大大減少代碼量,它還可以定制請求頭,這對于爬蟲程序來說是個非常好的功能。再者,使用requests庫時,requests庫會自動解碼來自服務(wù)器的內(nèi)容,而且,大多數(shù)的 unicode 字符都能被無縫地解碼,因此,可以避免大多數(shù)因為編碼造成的問題。今天,我們來看看使用requests如何下載網(wǎng)絡(luò)圖片到本地。 我們知道,使用urllib庫可以下載圖片,我們對urllib庫下載圖片進行梳理。具體方法如下。 # jpg_url: 下載圖片網(wǎng)址 # file_path: 文件路徑及名稱 from urllib import request request.urlretrieve(jpg_link, file_path) 這樣指定圖片就下載到本地目錄。對于一般服務(wù)器沒有反爬措施的可以使用這種方法下載。但是,沒有這么簡單,今天,我們下載一張妹子圖里面的照片。具體美女的圖片我就不貼出來了,網(wǎng)頁源代碼如下。 ![]() 圖片地址 想這種圖片一般是不好獲取真實圖片地址的,我們試試使用urllib庫不加頭文件直接下載看看。 ![]() 出錯了! 哦哦,文件下載出錯了,服務(wù)器拒絕了我們。下面,我們加入請求頭看一下結(jié)果。 # coding:utf-8 import urllib from urllib import requestheader = { 'Referer':'妹子圖主頁地址(自己修改)', 'User-Agent':'根據(jù)需要自己瀏覽器添加(機器人以為這個是電話號碼,真讓人欲哭無淚)' }req = urllib.request.Request('此處圖片地址略去', headers = header)req = urllib.request.urlopen(req)with open('meizi.jpg', 'wb') as f: f.write(req.read())加上請求頭之后文件下載成功。但是請注意,這種方法是使用urlopen()打開Request對象,之后,將對象流保存在本地。 使用requests庫下載圖片的方法探討同一張圖片,我們使用requests庫再下載一次。毋庸置疑,使用requests庫下載也是要加入headers的,不然,肯定也是被拒絕咯。我們加入header看一下。 ![]() 個人覺得使用requests比使用urllib方便一點,首先從代碼量上面就有優(yōu)勢;其次,在處理unicode字符時requests也比較占優(yōu)勢,在多數(shù)案例中,urllib里面報錯的放到requests中可能就很好的解決了,建議大家多實驗,從而總結(jié)一個個人常用的庫的使用方法,這樣對以后編寫爬蟲程序是大有裨益的…… 好了今天就到這里了!最后,送一張福利給各位…… ![]() |
|
來自: flyk0tcfb46p9f > 《AI》