有些大型的網站,都會有網頁爬蟲的偵測機制,像是請求的標頭、IP、規則性等等,一旦被偵測到就很有可能被封鎖,沒辦法再使用該網站的服務,導致很多人不敢輕易嘗試爬取大型網站的資料。那想要降低被偵測風險的方法之一,就是隨機輪換不同的Proxy IP和請求標頭,最近看到ScraperAPI提供了這樣的解決方案,使用上也非常的簡單,又有1000 API額度可以免費使用,所以這篇文章就來分享一下ScraperAPI的使用方式。
- ScraperAPI是什麼?
- Python網頁爬蟲串接ScraperAPI
- Python網頁爬蟲爬取網頁資料
一、ScraperAPI是什麼?
ScraperAPI是一個讓開發人員只要呼叫一次,即可取得目標網頁原始碼的API,透過它隨機輪換Proxy IP、瀏覽器標頭或CAPTCHA處理等,讓我們的Python網頁爬蟲不用擔心被網站偵測封鎖,可以順利取得目標網頁的原始碼。
那要使用ScraperAPI,就要先到它們的網站,點擊「START TRIAL」進行註冊,來取得API KEY,如下圖:
截取自ScraperAPI官網
二、Python網頁爬蟲串接ScraperAPI
註冊完成後,前往左側選單的API playground,如下圖:
截取自ScraperAPI官網
在下方就可以看到ScraperAPI的使用方式,這邊就用Python程式語言為例:
截取自ScraperAPI官網
其中,payload裡面的url參數,就是我們想要爬取的目標網頁網址。
接著,點擊程式碼右上角的「COPY TO CLIPBOARD」複製程式碼,貼到我們的Python網頁爬蟲專案中,並且引用BeautifulSoup模組,如下範例:
from bs4 import BeautifulSoup import requests payload = { 'api_key': '你的API KEY', 'url': '想爬取的目標網頁' } r = requests.get('https://api.scraperapi.com/', params=payload)
假設我們想要爬取INSIDE硬塞的網路趨勢觀察網站的AI文章標題,就要在payload的url參數中貼上它的網址,如下範例:
from bs4 import BeautifulSoup import requests payload = { 'api_key': '你的API KEY', 'url': 'https://www.inside.com.tw/tag/ai' } r = requests.get('https://api.scraperapi.com/', params=payload)
三、Python網頁爬蟲爬取網頁資料
由於ScraperAPI只會幫我們取得目標網頁的原始碼,接下來還是要自行實作爬取資料的動作。所以前往INSIDE硬塞的網路趨勢觀察網站的AI文章,如下圖:
回到Python網頁爬蟲專案,將ScraperAPI回傳的網頁原始碼傳入BeautifulSoup模組中,如下範例:
from bs4 import BeautifulSoup import requests payload = { 'api_key': '你的API KEY', 'url': 'https://www.inside.com.tw/tag/ai' } r = requests.get('https://api.scraperapi.com/', params=payload) soup = BeautifulSoup(r.text, 'lxml')
利用BeautifulSoup模組的find_all()方法,爬取網頁上所有的文章標題元素,如下範例:
from bs4 import BeautifulSoup import requests payload = { 'api_key': '你的API KEY', 'url': 'https://www.inside.com.tw/tag/ai' } r = requests.get('https://api.scraperapi.com/', params=payload) soup = BeautifulSoup(r.text, 'lxml') # 爬取網頁上的所有文章標題元素 titles = soup.find_all("h3", {'class': 'post_title'})
最後,用For迴圈來進行讀取,並且利用BeautifulSoup模組的getText()方法,爬取文章標題資料,如下範例:
from bs4 import BeautifulSoup import requests payload = { 'api_key': '你的API KEY', 'url': 'https://www.inside.com.tw/tag/ai' } r = requests.get('https://api.scraperapi.com/', params=payload) soup = BeautifulSoup(r.text, 'lxml') # 爬取網頁上的所有文章標題元素 titles = soup.find_all("h3", {'class': 'post_title'}) for title in titles: print(title.getText()) # 印出爬取到的文章標題文字
執行結果如下:
世界第一位 AI 軟體工程師「Devin」,能全自動完成複雜工程任務 Google 在台力推 Gemini 學院!第三條海底電纜也將完工啟用 黃仁勳:就算對手免費提供晶片,用 NVIDIA 還是更划算 Oracle 面對 AI 伺服器強勁需求,正在建可容納 8 台波音 747 的資料中心 Palantir 贏得美軍 1.78 億美元合約,打造戰地 AI 情報站「泰坦」 ...
四、小結
ScaperAPI提供了一個簡單的介面,讓我們在建置Python網頁爬蟲的時候,可以輕鬆避免被反爬蟲機制偵測的風險,順利爬取到更高價值的網頁資料來進行分析,對於想要爬取大型網站資料的人來說,是非常好上手的工具。
你可能有興趣的文章
留言
張貼留言