爬蟲與API(上)
本系列兩篇文章講API的概念,以及它在爬蟲中的使用,分為如下部分
API概念庫的API數據APIGithub APIhttpbin其他API
由於篇幅限制,本文只展示
- API概念
- 庫的API
- 數據API
API概念
API(Application Programming Interface)即應用程序介面。可以理解成一個地方,那裡有整理得非常好的、供人隨意調用的資源。
可以先看知乎這兩個問題中的回答進一步理解一下
- 如何通俗地解釋API?
- 想問一下什麼是API介面,具體是什麼意思?
python爬蟲中通常提到的API一般有兩種情況:數據API和庫的API。
庫的API
庫的API很好理解,就是一個人寫了一個python庫,他要找一個地方告訴你庫里的每個函數接什麼樣的參數,一個對象可以調用什麼樣的方法,這個地方可以稱為API。它其實是開發者和使用者之間的一個橋樑,一個介面。
舉兩個例子,讓讀者有一個直觀的認識
1.pymysql庫的api看這個網站,如下圖所示
這是pymysql庫的說明文檔,裡面有User Guide是面向使用用戶的教程,還有一個就是API Reference就是這裡說的API介面,點進其中一個可以看到
2.resquests庫的官網,下拉可以找到The API Documentation / Guide
點進其中一個可以看到
數據API
這種形式的API一般是前端和後端的橋樑。後端計算出結果或者要展示什麼數據,就設計一個數據介面(API),前端人員(可以理解成製作網頁頁面的人)調用這個介面,即可獲取數據,將數據展示到頁面上。這種API的設計是很有講究的,設計一個方便易用、易於維護的介面,對前後端工作人員的協作是非常有幫助的。如果用百度搜索「介面設計」,會搜到很多關於介面設計的原則。
這種API一般以URL形式存在,有些API不僅在網站內部使用,而且也向外界提供,我們可以通過訪問這些URL來獲取數據。
假設一個場景,比如我要做一個app,每天展示知乎上被瀏覽數量最多的幾個回答,再拿一些數據做圖表等。這時我需要拿到知乎的數據進行分析再展示。如何拿到數據呢?我可以用爬蟲去全網爬,但是這樣不僅耗時耗力,而且對知乎伺服器會造成比較大的壓力。如果知乎給我提供一個API,裡面整齊地放著我想要的數據,那麼我就可以更方便地獲取數據,同時知乎伺服器壓力也會小很多。如果另一個人也有了一個idea,想做另一個關於知乎的app,他也要獲得數據,他也可以用這同一個API。甚至知乎網站上展示的頁面中的信息也可以是從API中調用的。所以這樣一個數據介面就可以供多方使用,非常方便且多方獲益,很多網站都會提供。
通常來說,如果網站提供了API,我們就不要去抓他們的HTML代碼了,應該直接接入他們的API獲取數據。這樣做既減輕了他們的伺服器壓力,也讓我們免去解析他們網頁的繁雜工作。
說了這麼多,我們來看一個例子
我的專欄頁面
右鍵-檢查,選擇Network,刷新頁面,在XHR下找到下面這個文件
這就是知乎API提供的數據,是用json格式存儲的數據,每一條是專欄中一篇文章的各個信息,包括標題、文章標題、作者信息等等。如果我們要用爬蟲抓取這個專欄的文章信息,直接從這個文件里提取信息是要比解析HTML代碼更方便的。其實這個頁面也是從這個API中獲取數據,再傳入HTML代碼中展示給我們的。
這個API是一個URL的形式(當前是Preview欄,改成Headers欄即可看到這個URL)
https://zhuanlan.zhihu.com/api/columns/python-programming/posts?limit=20
(注意裡面有api字樣)把這個鏈接輸入瀏覽器里就可以看到剛剛看到的信息了。
本專欄上一篇文章中抓取ajax動態載入頁面問題就是通過請求API獲得的數據。
知乎其實沒有顯示地提供API,只是我們在分析知乎頁面載入文件時可以查找到網站內部使用的API。而有些人就通過爬蟲做了知乎的API放在github上,百度一搜可以看到很多。如果連分析網頁都懶得做,可以直接調用這些項目提供的API,只是他們提供的數據介面不一定包含你想要的數據,而且他們的代碼也很難保證能持續運行。
而有很多網站是對外公布API,並且提供API使用說明的,下一篇文章我們會用到具體網站的API,講述如何查看API文檔、獲得API許可權、從API中獲取數據。
下一篇文章:API全面總結(下)
專欄信息
專欄主頁:python編程
專欄目錄:目錄
爬蟲目錄:爬蟲系列目錄
版本說明:軟體及包版本說明
推薦閱讀:
※四、BeautifulSoup庫
※爬蟲-使用Python3爬取360DOC文檔
※請求、響應和反爬蟲
※輪帶逛終極版! 抓取輪子哥(vczh)全部知乎動態
※基於Python3的小說爬蟲