搜集資料是資料分析的基礎
資料科學是將大量資料經過電腦演算法的運算,結合統計、電腦科學技術,產生有用的預測跟洞察趨勢的科學。最近在學習Python,其中一個很重要的原因是希望運用資料科學幫助投資,甚至於開發量化交易程式,然而「大量資料」的產生在無法自動化時,是費時費力的工作。
資料科學是透過計算、統計、視覺化呈現以洞察資料價值的科學,資料來源:Harvard CS109 |
蒐集資料是資料分析、處理的基礎,例如Tesla的無人駕駛,除了採用全球算力排名第五的超級電腦外,透過實際在道路上行駛的百萬輛汽車,傳回來1.5 PB (peta bytes)的影像資料,經過自動標註 (labeling) 後訓練深度學習模型、開發自動駕駛功能。
一般應用是不可能在短時間內產生大量的資料,網際網路就成為最佳的資料來源,透過蒐集分析網路上的大量資料就是網路爬蟲 (web crawling) 的由來。
閱讀重點:
- 蒐集大量資料是資料科學的基礎
- 網路爬蟲是自動化蒐集網路資料的技術
- CAPTCHA驗證是區分人與電腦的圖靈測試,目的在阻止惡意網路攻擊
- 2captcha以大量「人工」提供準確、快速、低成本的CAPTCHA線上驗證服務,協助自動化資料蒐集
網路爬蟲 (web crawling) 就是搜集網路資料的技術,透過程式自動擷取、解析網頁上的資訊,整理成結構化的檔案格式,方便後續的數據分析,要成為「資料科學家」要先學會搜集資料,「網路爬蟲」便成為必要的能力。
在金融投資領域,網路爬蟲可以實現諸多不同的用途,例如:
- 定期搜尋商品價格,當降價時即時通知
- 從股票資訊網站獲取股價、財報、成交量等資料,追蹤、預測股價走勢
- 定時自動下載財金網站新聞標題、內容,分析的出優質的財經資訊,快速掌握最新市場資訊
網路爬蟲與網頁抓取 Web Crawling & Web Scraping
網路爬蟲包含了兩個分類,分別是「網路爬蟲 web crawler」和「網頁抓取 web scraper」。
網路爬蟲(web crawling)主要是為建立網頁索引並蒐索內容,像是Google的搜索引擎,透過網路爬蟲將抓到的資料儲存下來,以便生成索引供用戶搜尋
網頁抓取(web scraping)是從特定網頁抓取部分內容,將資料存儲至檔案或資料庫,以供其它分析的用途,因此一般我們提到的網路爬蟲其實指的是網頁抓取(web scraping)喔。
網頁爬蟲CAPTCHA驗證
網路爬蟲流程
網路爬蟲的流程依序為:請求網頁內容、抓取所需資料、分析與儲存整理過的資料,請求網頁內容部分通常是最容易遇到驗證不是機器人的情況。
請求網頁內容驗證CAPTCHA
網路爬蟲進行的第一步是向目標網站請求特定網址(URL)的內容,白話文來說就是在瀏覽器(如:Chrome)的網址列輸入文字,按下Enter鍵。
然而抓取網頁資料經常會遇到驗證程序,例如台灣高鐵的網路訂票系統,需要輸入扭曲的字元
台灣證券交易所的會員登入,就需要用點選方式驗證不是機器人
或者多次資料抓取後,需要進一步的以圖片進行驗證
也有像銀行需要輸入驗證數字的類型,來避免受到網路攻擊
兆豐銀行登入畫面 |
這些驗證程序稱為 CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans) 是自動區分人類和電腦的圖靈測試,也有像Google的reCAPTCHA,透過大量人類輸入驗證碼的過程,幫助經過掃描下來的典籍完成數位化,例如《紐約時報》的數位化,更甚者是同時協助訓練 AI 影像辨識模型。
網路爬蟲是否合法?
基本上網路爬蟲和網頁抓取並不違法,其實 Google 上搜尋的資料也是 Google 透過網路爬蟲搜集來的,但是否違法還是取決於抓取方式、資料的使用,若過度爬蟲造成對方伺服器很大的負擔,或搭配了駭客技術攻擊網站,還是可能違法。
Python的網路爬蟲工具
Python其實是非常適合網路爬蟲的程式語言,爬蟲的原理其實是模擬人類操作瀏覽器的行為,而Python有很完善的套件讓整個工作能夠有效簡化。
BeautifulSoup: 解析網頁的套件,說明文件在此 https://reurl.cc/YOkL8O
Selenium: 抓取由Javascript產生的動態網頁內容,中文介紹文件在此 https://reurl.cc/Q9V0e0
但是面對各種不同驗證的要求上,還需要有對應的解決方案。
網頁自動驗證方案
CAPTCHA的驗證的主要目的在於防範惡意的大量自動化網路攻擊程式,例如垃圾訊息、賭博、詐騙、竊取用戶資料等問題。CAPTCHA本身也是自動化作業,設計在網站的特定位置彈出,對於合理的資料搜集也造成一定的阻礙,因此自動通過驗證的服務商也就因應而生。
OCR 光學字元辨識
例如透過開源的 OpenCV 進行影像處理、文字辨識,但僅適合文字、數字等簡單的驗證方式,正確率也不是很高,根據 towardsdatascience.com 的資料準確率大約只有1/3。
Machine Learning 深度學習
需要建立 AI 神經網路模型,透過足夠的資料訓練、足夠強大的電腦,針對「特定的驗證圖案」可以得到還不錯的結果,例如這篇 PyTorch實戰 - 高鐵驗證碼辨識。但網路爬蟲還需要自建、訓練 AI 模型,還侷限在特定圖案應用,有點不太實際。
Online Solving Service 在線人工服務
既然「人工智慧」需要的資源所費不貲,那麼在線的「工人智慧」對各種不同CAPTCHA驗證,能夠提供真實人類的高準確率驗證服務,當程式送出驗證需求時透過服務商的伺服器,由真人進行驗證後將結果回傳,根據 towardsdatascience.com 提供高達99%的準確率,而2captcha.com就是其中的領導廠商。
2captcha.com的online服務
2captcha提供強大的Captcha辨識服務,在首頁左側是Captcha的驗證服務,每1,000次驗證 USD0.5,右側則是加入真人驗證輸入識別碼賺錢。
是的,2captcha高達 99%的準確率,就是使用了真人來進行驗證,接近 10秒的驗證速度也是因為擁有充沛超過 7萬個網路大軍替客戶服務!網路上也有不少介紹加入2captcha進行驗證碼輸入來賺錢的文章。
2captcha.com首頁的服務介紹 |
服務優點
根據towardsdatascience的分析,2captcha.com服務的優點有
- 速度快,圖案、文字類的Captcha驗證僅需 17秒,較複雜的reCaptcha大約 23秒(根據2captcha.com的最新數據,Captcha為 11秒、reCaptcha為 20秒)
- 高達 99% 的準確率
- 驗證錯誤時可以得到退款
- 大量驗證能力,每分鐘可超過10,000個captcha的驗證
- 支持多種不同程式語言
2captcha.com 驗證速度,資料來源:2captcha.com網站 |
運作方式
實際操作2captcha通過驗證的運作方式很簡單:註冊、安裝API、傳送CAPTCHA、接收回傳訊息,API支援多種主流程式語言 python、php、javascript、GO、Ruby ...
首先透過email進行註冊
驗證完email後登入的畫面是個資訊豐富的dashboard看板
安裝 API 套件
看板頁面靠中間位置的Account settings處有API Key,安裝 API 時需要使用,可以點選右上角的 Copy 複製下來
註冊後安裝 API
pip3 install 2captcha-python
填入前面取得的 API Key
from twocaptcha import TwoCaptcha
solver = TwoCaptcha('YOUR_API_KEY')
2captcha.com的實際範例
2chaptcha.com網站上有詳細的介紹,在Python程式中使用其服務 https://2captcha.com/demo,下面舉兩個範例介紹:
一般Captcha的文字驗證
程序上是 1. 下載影像檔案; 2. 透過2Captcha API傳送影像; 3. 將回傳的代碼填入; 4. 傳送驗證結果
import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) from twocaptcha import TwoCaptcha api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY') solver = TwoCaptcha(api_key) try: result = solver.normal('path/to/captcha.jpg') except Exception as e: sys.exit(e) else: sys.exit('solved: ' + str(result))
reCaptcha V2 的「我不是機器人」驗證
先利用瀏覽器例如Chrome的開發人員選項,檢視原始碼功能性,開啟網頁的程式碼,找到 data-sitekey 屬性
將 sitekey 、url 兩個資料填入 2Captcha API:
import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) from twocaptcha import TwoCaptcha api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY') solver = TwoCaptcha(api_key) try: result = solver.recaptcha( sitekey='6LeIxboZAAAAAFQy7d8GPzgRZu2bV0GwKS8ue_cH', url='https://xxx.com') except Exception as e: sys.exit(e) else: sys.exit('solved: ' + str(result))
等待系統回傳類似下方的驗證碼:
"03AGdBq27lvCYmKkaqDdxWLfMe3ovADGfGlSyiR-fN_EJrZGniTAmdH1XSjK8ralsctfjOLX2K0T7dJfxPqqga8dtSG2Lmns8Gk2ckcU6PQzUFieBqrtpkr5PPwnngew0Rnot2ik1y8m202u6pHTIquExlEYSlzS8vfoyPPt8fCf-Zrbu8vWkiY8Ogj17ommHMgkguZbmEyOdfLTXzhRko-a655_jJdCMjEtMxva-b78DnGlXu9d0o6vEmrw9n8ABu4lLsWnIbYPH0beXRRIkUE3si64Xhwkh1aO3L1HaIR3sfR0vOs3GV1OBzry_tFsZM0ZhSQovKJwjLlotrYajyTSRv3hgvXtLlLxXzbAwgeI91-wM7AFEte0uO_DhcNajxZr7E50wU9vuAe_drGWe4q-hNx4PQPenjaw"
在網站程式碼中,找到 textarea with id="g-recaptcha-response",填入收到的驗證碼,再回傳網頁的驗證就可以通過了。
費用
2captcha.com網站上清楚的列出了收費標準,1,000次一般的 captcha驗證為 $0.76,1,000次的 reCaptcha則為 $2.99,相對於99%的準確率,收費算是合理。
結語
網路爬蟲是搜集資料的利器,也是以資料科學進行大量資料分析、洞察有用資訊的重要手段,利用2captcha提供的API,能快速、準確的通過驗證,完成蒐集資料的前置作業。
2captcha的人工驗證服務雖然需要收費,但也能防止網路資訊被濫用,對有實際爬蟲需求的程式設計師而言,能更專注於資料的分析與處理。
本文由 2captcha.com 贊助撰寫,如有業務合作事宜請email或Facebook私訊聯繫。
0 comments