一、API接口概述
綿陽網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),綿陽網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為綿陽上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的綿陽做網(wǎng)站的公司定做!
今天我們來講一種更快捷的獲取數(shù)據(jù)的方式,通過API數(shù)據(jù)接口抓取數(shù)據(jù)。
API接口是負(fù)責(zé)傳遞數(shù)據(jù)的,在現(xiàn)今已存在的網(wǎng)站中,除了極個(gè)別非常古老的網(wǎng)站,大部分的網(wǎng)站都會采用API進(jìn)行數(shù)據(jù)的傳輸。那么為什么API接口這么受歡迎呢,那當(dāng)然是其帶來了很多的好處,最直觀的便是節(jié)省了開發(fā)的大量時(shí)間、大量金錢。舉個(gè)例子:一個(gè)編程團(tuán)隊(duì)想制作一個(gè)游戲,在這個(gè)游戲里有付費(fèi)的功能,那么就需要有一個(gè)支付的平臺,而眾所周知,支付平臺是需要有很大能力去保證安全且需要一定的資金還有資質(zhì)的,普通的團(tuán)隊(duì)壓根搞不起啊,所以,這個(gè)團(tuán)隊(duì),就需要用到“API接口”,他可以接入其他的支付平臺API接口實(shí)現(xiàn)支付功能,這樣就省去了很多的麻煩。所以,不例外的我們要獲取的數(shù)據(jù)也是可以通過API接口傳遞到頁面中的,那么如何利用好API接口,這便是我們要學(xué)習(xí)的了。
二、API接口結(jié)構(gòu)
API接口長什么樣子呢,請繼續(xù)看:
https://v.api.aa1.cn/api/api-qq-gj/index.php?qq=xxxxx&num=xx&vip=x
上方這個(gè)URL便是一個(gè)API接口,它是由請求地址和請求參數(shù)兩部分構(gòu)成的,請求地址和請求參數(shù)之間使用?連接,請求參數(shù)要寫成key=value的形式(我們常說的鍵值對),如果同時(shí)有多個(gè)請求參數(shù),請求參數(shù)之前使用&連接。
請求地址,顧名思義就是你請求的服務(wù)器的入口;請求參數(shù),就是按照設(shè)定你得告訴服務(wù)器你要做什么。相信大家也嘗試打開這個(gè)鏈接了,結(jié)果發(fā)現(xiàn)什么也沒有,那是因?yàn)檫@個(gè)API的請求參數(shù)設(shè)定不正確。
這是一個(gè)QQ價(jià)格評估接口,這是它需要的參數(shù)信息以及返回結(jié)果信息:
我們只需要按照上圖的信息稍微修改下,便能得到想要的信息。
https://v.api.aa1.cn/api/api-qq-gj/index.php?qq=1766*****6&num=68&vip=1
這便是我的QQ的評估價(jià)格
那么API接口的數(shù)據(jù)如何被爬蟲獲取到呢?
三、requests請求API
API接口的請求就是簡單的requests代碼的編寫,一定注意要把API寫對。
從前文講requests到現(xiàn)在講爬取接口,我們一直使用的是get請求方式,后續(xù)會單獨(dú)講一次post請求。另外,一般爬取開放的API不需要對爬蟲添加偽裝,但是如果是爬取某些大型網(wǎng)站的API接口,可能會需要傳遞你登錄這個(gè)網(wǎng)站的賬號密碼、headers等參數(shù)。
import requests上方代碼執(zhí)行后結(jié)果是這樣的:
{"code":"1","qq":"176***5706","money": "112","dengji":"68級 ","vip":"非會員"}
大家看到這個(gè)結(jié)果感覺很熟悉,像Python中的字典,但不完全是。API接口中的數(shù)據(jù)是JSON數(shù)據(jù),被我們拿出來以后就變成了字符串。但是我們是可以將JSON數(shù)據(jù)轉(zhuǎn)換為Python的字典類型的。
import json至此,我們遍能夠拿到API接口中的數(shù)據(jù)了。
五、在網(wǎng)站中尋找API接口
在此以今日頭條這個(gè)網(wǎng)站為例。
正常的邏輯是不是就是使用requests結(jié)合正則表達(dá)式或者BeautifulSoup4進(jìn)行數(shù)據(jù)的爬取,但是我們可以先試著找找有沒有數(shù)據(jù)接口能夠讓我們更快速的得到數(shù)據(jù)。
使用快捷鍵F12(有些電腦是Fn + F12)或者直接網(wǎng)頁中右鍵點(diǎn)擊檢查按鈕打開開發(fā)者工具,如下圖所示,按照箭頭順序先切換到Network,再點(diǎn)擊Fetch/XHR,再重新刷新下頁面,就能夠看到紅框中加載出一些資源文件。
這些資源文件中就有可能存在我們想找的API數(shù)據(jù)接口,不是所有的網(wǎng)站都能找到數(shù)據(jù)接口,有些網(wǎng)站的數(shù)據(jù)接口很隱蔽,正常手段找不到,需要結(jié)合抓包工具才能夠找到,這里我們暫時(shí)先來講解一般的API接口尋找,后續(xù)單獨(dú)說明抓包工具的使用。
如何判斷哪個(gè)資源文件是我們想要的數(shù)據(jù)接口呢?最簡單的方法便是一個(gè)個(gè)的看。首先觀察紅框中的這樣幾個(gè)字段:Name、Status、Size、Time。
Name:文件名,我們依舊是遵循見名知義的原則,通過文件名猜測文件對應(yīng)的數(shù)據(jù)、
Status:狀態(tài)碼,我們需要的是狀態(tài)碼為200的文件、
Size:文件大小,數(shù)據(jù)多的資源文件大小都挺大的、
Time:加載時(shí)間,數(shù)據(jù)多的資源文件加載速度不一定很快。
當(dāng)你點(diǎn)擊了某個(gè)資源文件,在彈出來的窗口切換到Preview預(yù)覽選項(xiàng)卡發(fā)現(xiàn)加載出來的數(shù)據(jù)和頁面信息大概保持一致時(shí),API數(shù)據(jù)接口就找對了。此時(shí)便可以復(fù)制它的在線地址,寫爬蟲代碼去請求這個(gè)接口來提取數(shù)據(jù)了。
import requests