網(wǎng)絡(luò)圖片的爬取和存儲(chǔ)


如果一個(gè)鏈接是以 .jpg 結(jié)尾的,那么它是一個(gè)圖片,而且它是一個(gè)文件

保存圖片時(shí),我們需要知道圖片所保存的位置,先設(shè)置一個(gè)路徑 path?
假設(shè)圖片保存為abc.jpg這個(gè)名字,但這個(gè)名字后期我們會(huì)做相關(guān)的處理
下面給出我們查到的網(wǎng)絡(luò)圖片的地址
再用get請(qǐng)求捕獲這個(gè) url
返回狀態(tài)碼 200 ,說明這個(gè)時(shí)候 r 已經(jīng)包含了返回的這個(gè)圖片
下面就是保存這個(gè)圖片,圖片是二進(jìn)制的格式,我們通過 with open(path, 'wb') as f:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? f.write(r.content)
把二進(jìn)制的格式保存為文件
這段代碼的含義就是,我們打開了一個(gè)文件,這個(gè)文件就是我們要存儲(chǔ)的abc.jpg?
并且把它定義為一個(gè)文件標(biāo)識(shí)符 f?
然后我們將返回的內(nèi)容寫到這個(gè)文件中
respons對(duì)象返回的內(nèi)容中r.content表示的是返回內(nèi)容的二進(jìn)制形式
所以我們可以用 f.write(r.content) 將返回二進(jìn)制形式寫到文件中
最后我們將文件關(guān)閉
然后去d盤看abc.jpg這個(gè)文件是不是網(wǎng)上這個(gè)圖片

那么能不能用圖片原來的名字獲取圖片呢
只需要將url中圖片原本的名字最后的圖片文件的名字截取下來,作為我們本地目錄的名字就可以了
這里面我們除了import requests庫之外,,還需要import os 庫
這里面我們給出 url 鏈接,再定義一個(gè)根目錄 root, 我們把根目錄定義為D盤的pics目錄
然后我們把文件的路徑標(biāo)識(shí)為這個(gè)根目錄 root 加上我們 url 鏈接的以反斜杠分割的最后一部分,
其實(shí)這部分就是最后的 jpg 文件
這樣我們的 path 變量包含的就是本地路徑中的一個(gè)文件名稱,而這個(gè)文件名稱與網(wǎng)絡(luò)文件名的最后一部分是相同的
接下來我們以 try 和 except 為框架來獲取網(wǎng)絡(luò)代碼
首先我們用一個(gè) if 來判斷我們的這個(gè)根目錄是否存在,如果不存在,我們要先建立這個(gè)目錄
再判斷這個(gè)文件存不存在,如果文件不存在,我們通過requests get方式從網(wǎng)上獲取相關(guān)文件
代碼的可靠性和穩(wěn)定性非常重要,所以即使在寫簡(jiǎn)單的代碼,也都要考慮它可能出現(xiàn)的問題,并能夠?qū)栴}進(jìn)行處理
視頻,flash,動(dòng)畫等等也可以通過這種方法下載,原理相同,稍作改變即可
IP地址歸屬地的自動(dòng)查詢
如何查詢一個(gè)IP地址是來自于北京還是上海還是美國呢
我們需要找一個(gè)庫

他是通過ip138網(wǎng)站提交IP地址的一個(gè)url鏈接的接口形式
以http開頭的一個(gè)鏈接通過 ip = ipadress 這樣的形式將ipadress作為參數(shù)提交到前面的網(wǎng)頁中,
這個(gè)網(wǎng)頁根據(jù)這個(gè)參數(shù)會(huì)返回一個(gè)數(shù)據(jù)內(nèi)容,就是這個(gè)地址對(duì)應(yīng)的所在的物理位置
我們通過這樣的url接口就可以通過提交ip地址來找到ip地址的歸屬地

我們將剛才解析出來的這個(gè)接口用url變量來表示 url = ?......
然后我們用requests方法提交一個(gè)ip地址
我們?cè)贆z測(cè)一下狀態(tài)碼
200,說明我們的提交的信息被成功的返回了
然后我們?cè)倏匆幌路祷匚谋镜南嚓P(guān)內(nèi)容
r.text[-500:] 這里面我們查詢的是返回文本的最后500個(gè)字節(jié)
當(dāng)返回內(nèi)容非常多的時(shí)候,有時(shí)候會(huì)導(dǎo)致IDLE的失效,所以我們建議在編寫程序然后去檢查返回?cái)?shù)據(jù)的時(shí)候,盡量約束一個(gè)空間,比如后500個(gè)或者前1000個(gè)

只要能通過瀏覽器知道向后臺(tái)提交的鏈接形式,那就可以用python代碼來向服務(wù)器提交