Python教程之獲取網路資料!

千鋒武漢發表於2021-05-24

對於Python語言來說,一個較為擅長的領域就是網路資料採集,實現網路資料採集的程式通常稱之為網路爬蟲或蜘蛛程式。即便是在大資料時代,資料對於中小企業來說仍然是硬傷和短板,有些資料需要透過開放或付費的資料介面來獲得,其他的行業資料則必須要透過網路資料採集的方式來獲得。不管使用哪種方式獲取網路資料資源,Python語言都是非常好的選擇,因為Python的標準庫和三方庫都對獲取網路資料提供了良好的支援。

HTTP和requests庫

要使用Python獲取網路資料,我們可以先安裝一個名為requests 的三方庫。按照官方網站的解釋,requests是基於Python標準庫進行了封裝,簡化了透過HTTP訪問網路資源的操作。說到HTTP相信大家不會陌生,通常我們開啟瀏覽器瀏覽網頁時,我們就是使用了HTTP或HTTPS。HTTP是一個請求響應式的協議,當我們在瀏覽器中輸入正確的URL(通常也稱為網址)並按下回車(Enter),我們就向網路上的Web伺服器傳送了一個HTTP請求,伺服器在收到請求後會給我們一個HTTP響應,伺服器給瀏覽器的資料就包含在這個響應中。我們可以使用瀏覽器提供的“開發者工具”或是“抓包工具”(如:Fiddler、Charles等)來了解HTTP請求和響應到底是什麼樣子的,如下圖所示。

1

透過requests庫,我們可以讓程式向瀏覽器一樣向Web伺服器發起請求,並接收到伺服器返回的響應,從響應中我們就可以提取出我們想要的資料。下面透過兩個例子來演示如何獲取網頁程式碼和網路資源(如:圖片),瀏覽器呈現給我們的網頁是用HTML編寫的,瀏覽器相當於是HTML的直譯器環境,我們看到的網頁中的內容都包含在HTML的標籤中。在獲取到HTML程式碼後,就可以從標籤的屬性或標籤體中提取我們需要的內容。

獲取搜狐網首頁

代1

獲取百度Logo並儲存到名為 baidu.png的本地檔案中。首先在百度的首頁上,右鍵點選百度Logo,並透過“複製圖片地址”選單獲取圖片的URL。

代2

訪問網路資料介面

國內外的很多網站都提供了開放資料介面,在開發商業專案時,如果有些事情我們自己無法解決,就可以藉助這些開放的資料介面來處理。例如要根據使用者或企業上傳的資料進行實名認證或企業認證,我們就可以呼叫第三方提供的開放介面來識別使用者或企業資訊的真偽;例如要獲取某個城市的天氣資訊,我們不可能直接從氣象衛星拿到資料然後自己進行運算,只能透過第三方提供的資料介面來得到對應的天氣資訊。通常,提供有商業價值的資料的介面都是需要支付費用後才能訪問的,在訪問介面時還需要提供身份標識,便於伺服器判斷使用者是不是付費使用者以及進行費用扣除等相關操作。當然,還有些介面是可以免費使用的,但是必須先提供個人或者公司的資訊才能訪問,例如:深圳市政府資料開放平臺、蜻蜓FM開放平臺等。如果查詢自己需要的資料介面,可以訪問聚合資料這型別的網站。

開發爬蟲/蜘蛛程式

有的時候,我們需要的資料並不能透過開放資料介面來獲得,但是可能在某些網頁上能夠獲取到,這個時候就需要我們開發爬蟲程式透過爬取頁面來獲得需要的內容。我們可以按照上面提供的方法,使用requests先獲取到網頁的HTML程式碼,我們可以將整個程式碼看成一個長字串,這樣我們就可以使用正規表示式的捕獲組從字串提取我們需要的內容。下面我們透過程式碼演示如何從豆瓣電影獲取排前250名的電影的名稱。豆瓣電影Top250頁面的結構和對應的程式碼如下圖所示。

2

代3

編寫爬蟲程式比較重要的一點就是讓爬蟲程式隱匿自己的身份,因為一般的網站都比較反感爬蟲。隱匿身份除了像上面的程式碼中修改User-Agent之外,還可以使用商業IP代理(如:蘑菇代理、芝麻代理等),讓被爬取的網站無法得知爬蟲程式的真實IP地址,也就無法透過IP地址對爬蟲程式進行封禁。當然,爬蟲本身也是一個處於灰色地帶的東西,沒有誰說它是違法的,但也沒有誰說它是合法的,本著法不禁止即為許可的精神,我們可以根據自己工作的需要去編寫爬蟲程式,但是如果被爬取的網站能夠舉證你的爬蟲程式有破壞動產的行為,那麼在打官司的時候,基本上是要敗訴的,這一點需要注意。

另外,用編寫正規表示式的方式從網頁中提取內容雖然可行,但是寫出一個能夠滿足需求的正規表示式本身也不是件容易的事情,這一點對於新手來說尤為明顯。在下一節課中,我們將會為大家介紹另外兩種從頁面中提取資料的方法,雖然從效能上來講,它們可能不如正規表示式,但是卻降低了編碼的複雜性,相信大家會喜歡上它們的。

簡單的總結

Python語言能做的事情真的很多,就獲取網路資料這一項而言,Python幾乎是一枝獨秀的,大量的企業和個人都會使用Python從網路上獲取自己需要的資料,相信這一點在現在或者將來也會是你工作中的一部分。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2773596/,如需轉載,請註明出處,否則將追究法律責任。

相關文章