Part19 實(shí)例5:IP地址歸屬地的自動查詢
怎么查詢一個IP地址的歸屬呢?比如說某一個IP地址他是來自于北京、上海還是美國呢?我們用一個python 程序來判斷。當(dāng)然你要判斷一個地址的歸屬地,你必須要有一個庫,那么我們的程序沒有這樣的庫,我們可以在網(wǎng)上尋找相關(guān)的資源,事實(shí)上,一個叫IP138的網(wǎng)站提供了這樣的功能,我們看一下這個界面:

實(shí)際這個界面呢,包含兩個輸入框,我們可以在輸入框中輸入IP地址,并通過點(diǎn)擊按鈕查詢來提交這個IP地址并獲取這個IP地址的所在地,這樣的東西適合人的使用,因?yàn)檫@是一種人適合結(jié)構(gòu)方式,到那時他不適合程序。那么在程序中怎么去提交IP地址呢?這里邊教大家一個小技巧:你可以嘗試著在界面中輸入一下IP地址,并且點(diǎn)擊查詢,看一下瀏覽器的變化。在某些網(wǎng)站中他對提交的IP地址并沒有相關(guān)的處理,所以我們能看到通過IP138網(wǎng)站提交一個IP地址的一個URL鏈接是這樣的一個接口形式,這個接口形式其實(shí)很好理解:

它是一個以http開頭的一個鏈接,然后通過ip = ipaddress這樣的一個形式,將ipadress作為一個參數(shù)提交到前面的網(wǎng)頁中,那么這個網(wǎng)頁根據(jù)這個參數(shù)會返回一個數(shù)據(jù)內(nèi)容,就是這個地址對應(yīng)的所在的物理位置。那么我們利用這樣的URL接口就可以通過提交IP地址來找到IP地址的歸屬地。下面我們來用一段代碼來試試:
首先我們import requests庫,然后呢我們將剛才解析出來的接口用URL的變量來表示,然后我們用requests的方法提交一個IP地址,然后我們來檢測一下狀態(tài)碼,200,說明我們提交的信息被成功的返回了,然后我們看一下返回文本的相關(guān)內(nèi)容,這里面我們查詢的內(nèi)容是返回文本的最后500個字節(jié),我們可以看到這個IP地址是北京理工大學(xué)教育網(wǎng)的IP地址。

事實(shí)上,如果大家訪問這個網(wǎng)站,這個網(wǎng)站是北京理工大學(xué)首頁的IP地址。這里面有一個小技巧,如果你嘗試一下,當(dāng)你獲取一個URL鏈接返回的內(nèi)容非常多的時候,r.text會導(dǎo)致IDLE的失效,所以我們建議大家如果在編寫程序去檢測訪問數(shù)據(jù)的時候,盡量約束一個范圍空間,比如像剛剛寫的r.text[-500:],也就是說最后的500,或者說我們經(jīng)常使用的[0:1000],顯示一千個字符,這樣的方式可以保證不會影響IDLE的使用。下面我們給出IP地址查詢的全代碼:

與之前的例子相比,這個例子比較簡單,但是這個例子其實(shí)告訴了大家一個道理:我們有的時候在網(wǎng)站上看到的人機(jī)交互方式,比如說圖形的、文本框的、需要點(diǎn)擊按鈕的這種方式在正式的向后臺服務(wù)器提交的時候,其實(shí)都是以鏈接的形式來提交的。只要你能夠去通過瀏覽器的解析知道向后抬提交的鏈接的形式,那你就可以用python代碼模擬后者是用python代碼去向服務(wù)器做正式的提交,而不需要人來做這樣的事情。所以當(dāng)你需要自動向網(wǎng)站提交的時候,建議大家去挖掘一下這個網(wǎng)站后臺的API是什么。
Part 20 單元小結(jié)
在這個單元中,我們講解了5個request庫的爬取實(shí)例,那經(jīng)過這些實(shí)例大家是不是知道request庫的強(qiáng)大功能呢?現(xiàn)在我們在看一看這些實(shí)例。
第一個實(shí)例:京東商品頁面的爬取,我們用我們的網(wǎng)絡(luò)爬蟲框架獲得京東商品的頁面的信息。
第二個實(shí)例:我們做的是亞馬遜商品頁面的爬取,他與京東商品頁面爬取不同,亞馬遜的商品對來源做了審查,所以我們可以利用request庫的功能來模擬瀏覽器向亞馬遜提出相關(guān)的請求并且正確的獲取商品頁面的信息。
第三個實(shí)例:同時我們可以向百度、360這樣的搜索引擎提交關(guān)鍵字并獲得他返回的結(jié)果。
第四個例子:是網(wǎng)絡(luò)圖片的爬取和存儲,事實(shí)上它不只是圖片,對網(wǎng)上所有的二進(jìn)制的資源格式,圖片、視頻、動畫等等,都可以用同樣的代碼獲取它。
第五個例子:我們看一下對一些網(wǎng)站怎么去人工的分析他的接口并利用接口來實(shí)現(xiàn)IP地址歸屬地的查詢。事實(shí)上,這些例子不僅檢測和證明了request庫的強(qiáng)大,同時其實(shí)也讓我們?nèi)ニ伎嘉颐丛撛趺慈タ创W(wǎng)絡(luò)內(nèi)容。所以我們?nèi)祟惪吹骄W(wǎng)絡(luò)內(nèi)容是通過瀏覽器,通過敲擊URL,并且通過鼠標(biāo)去點(diǎn)擊一個一個的鏈接,但是如果你想要成為網(wǎng)絡(luò)爬蟲方面的專家,你就要通過網(wǎng)絡(luò)爬蟲的視角來看待網(wǎng)絡(luò)內(nèi)容。那么對于網(wǎng)絡(luò)上的內(nèi)容,什么是網(wǎng)絡(luò)爬蟲的視角呢?那就是網(wǎng)絡(luò)上的任何一個內(nèi)容它都有一個URL與它對應(yīng)。而對網(wǎng)絡(luò)內(nèi)容的獲取、查詢都是通過構(gòu)造URL來實(shí)現(xiàn)的。我們知道HTTP協(xié)議中,他有兩個很重要的基礎(chǔ),一個是網(wǎng)絡(luò)資源定位的URL,一個是對資源操作各種操作。只要我們勤加思考去練習(xí),能夠?qū)W會以爬蟲角度來看待網(wǎng)絡(luò)內(nèi)容,你就能成為網(wǎng)絡(luò)爬蟲方面的專家。

大家一起努力!