(先澄清,以下非業配,純粹依個人使用過程描述。)
前言
因為某原因,需要爬取"Google 搜尋"頁面上的資料,沒多久前舊有的網頁爬蟲請求失敗了!! (不妙啊…
後來多次嘗試,也改用手機網路分享(不同IP)測試,也是遇到同樣的問題"HTTP Error 429: Too Many Requests",並需要通過 reCAPTCHA 驗證。
📢 白話翻譯:你短時間送出太多請求了,一般人不可能這麼頻繁,我嚴重懷疑你是機器人,先出個題目讓你回答(順便賺個免費勞工幫我們訓練機器學習),等確定你是真人再給你資料。
後來想說為了穩定及時間因素,不要我們自己手動爬取、絞盡腦汁突破了,請求外援看看XD
尋找 Google 搜尋 API
先去 Google 官網看看是否提供對應功能的 API,結果是有 Custom Search JSON API,但每天只免費提供 100 次搜尋,額外請求的費用為每 1000 個搜尋 5 美元,每天最多 1 萬次搜尋。
這對我來說免費額度遠遠不夠,加購的價格又超貴 QAQ
官方提供的不行,不然找找看網路上,有沒有別人提供免費或付費的 Google 搜尋 API 服務可以使用呢?因為感覺某些資訊公司也會有這種需求。
後來找到「Aves API」,其他有提供類似的服務還有「SerpApi」、「Rapid API」、「zenserp」、「ScraperBox」、「DataForSEO」……等可以參考,多方去比較,找到最符合自己需求的服務。
最後我選擇 Aves API,會選擇這個最主要的因素 – 便宜😅,這是我目前找到最便宜的,而且它計費的方式與其他有些不同,它是類似儲值的概念,你用多少就扣多少,沒有時間上的限制,而其他比較常見的是按月付款。
測試頁面
在 Aves API 官網首頁上有個可以實際輸入關鍵字,查看它回傳的資料是那些、長怎麼樣的 即時測試頁面(Live Demo),能在此先測試是否有符合自己的需求。
API 相關文檔
錯誤狀態代碼
如果請求收到錯誤狀態代碼,可以在這邊查看是什麼原因,例如:API 金鑰無效、缺少查詢參數、帳戶額度不足。
API 參數
註冊後會取得唯一的 API Key(金鑰),送出請求時要代入。
API 網址如下:
https://api.avesapi.com/search?apikey=YOUR_API_KEY
(使用 GET 方式送出請求,等同於你在瀏覽器直接輸入網址啦!)
而此 API 目前可帶參數有以下這些:
參數 | 代表意思 | 預設 |
---|---|---|
apikey | [必要] 你的 API Key(金鑰)。 | [無] |
query | [必要] 要搜尋的關鍵字。 | [無] |
device | 指定搜尋裝置平台:desktop 或 mobile 。 | desktop |
location | 指定位置參數,有助於取得基於位置的搜索結果。提供的位置在 places.json 此檔案內所列出來的,需要的話就帶入place_slug 中的值。台灣可以使用"tw" 在檔案內搜尋,例如有taipei 、taichung 、tainan 、kaohsiung 等地點。 | [無] |
google_domain | 指定 Google 網域,支援的列表 google-domains.json。台灣是 google.com.tw 。 | google.com |
gl | 指定查詢的國家代碼(預設美國),支援的列表 countries.json。台灣是 tw 。 | us |
hl | 指定查詢的語言(預設美語),支援的列表 languages.json。繁體中文是 Chinese (Traditional) 。 | en |
num | 指定每頁顯示的結果數,測試最多到100 。 | 10 |
page | 指定頁數(1~10頁)。 | 1 |
uule | Returns the location based search results. (好像可以設定精確位置,但我不了解。) | [無] |
output | API 回應資料的格式:json 或 html 。 | json |
* 還有我發現在它 API Playground 頁面,還有一個的參數是type
,代表搜尋種類,有 web
(預設)、image
、news
可選,但這個參數我還沒實際試過。
使用範例
舉例來說,我想要在 google.com.tw 網域上搜尋"手機",國家設定台灣、語言當然是繁體中文,想要看前 100 個搜尋結果,就如下代入參數請求:
https://api.avesapi.com/search?apikey={your-api-key}&query=手機&google_domain=google.com.tw&gl=tw&hl=zh-tw&num=100
或者參數也可以以字典(Dictionary)的方式呈現。
在此使用 Python 程式來示範。
|
|
回應資料如此:avesapi_data.json
除了一般的搜尋結果與排名,如果搜尋結果內還有"圖片"、"影片"、"地圖"、"相關搜尋關鍵字",它一樣也可以取得。
網站後台
當你註冊後登入,即可進入後台頁面去查看更多相關資訊。
其中有幾個重要的頁面:
儀錶板(Dashboard)
像是你還剩多少額度、最近請求的紀錄、每天使用量等等,以圖表來呈現。
API Playground
API Playground 以圖形化的操作頁面,讓你可以實際選擇參數、送出請求,並查看回傳的資料。如果你發現使用自己寫的程式,都沒有成功的話,也可以在此頁面測試,藉此排除是否是 API 的問題。
但要注意,這邊請求會帶上自己的 API Key,因此每一次請求也是會扣積分的哦!
剩下的是一些購買頁面、購買紀錄、個人資料等等,這邊我就不展示了。
注意事項
- 有時因他們伺服器問題,會發生請求回應失敗,無法取得資料的情況,這時再重新送出請求一次即可,這個不會扣除積分。
- 使用發現有時請求會發生 timeout 逾時,沒有成功取得資料,但卻還是被扣了一個積分額度。
與客服聯繫後得知,此 API 請求最大 timeout 為 30 秒,也就是說如果我requests.get(url, timeout=20) 設定 20 秒,但伺服器在 25 秒時才回覆資料,那我程式這邊雖然是 timeout,但他們是有送出資料(一樣算成功請求,會被扣積分)。所以建議 requests 中 timeout 要設定大於 30 秒。 - API 文檔有列出一些禁止的關鍵字,例如:
site:
、domain:
、title:
、before:
……,可能因為這些進階查詢讓他們系統比較容易被檔吧(?),如果使用這類關鍵字查詢的話,每個成功請求會被扣 25 個積分。
結語
因為 Google 搜尋結果相關的 API 我也只使用過這一款,所以沒辦法跟你說是不是這個就是最好,但其實這類的服務大同小異,需要的話可以自行比較看看,官網文檔是否完整詳細、客服回應速度如何、是否提供台灣中文搜尋參數、計費方式、網路上別人的評價推薦。
最好也註冊一個帳號,用免費的額度嘗試,是否有達到自己的需求。
* 要注意某些網站可能沒有提供免費額度
參考:
Google Custom Search JSON API 官網
Aves API 官網
又一天過去了。今天覺得如何呢?
夢想是不是又更遠了?—— 每天來點負能量
🔻 如果覺得喜歡,歡迎在下方獎勵我 5 個讚~