個人項目
免責聲明:本文章涉及到的應用僅供學習交流使用,不得用於任何商業用途,數據來源於互聯網,與本人無關!由此引發的任何法律糾紛與本人無關!
寫在前面:我一直在寫爬蟲,無論是最開始的大學時期的C# WinForm爬蟲,還是Java爬蟲,又或是Python爬蟲,Android爬蟲,到今天的Flutter爬蟲。
爬蟲
1.接口請求式
他們的原理始終都是一樣的,那就是:
- 設置正常的瀏覽器User-Agent
- 處理好頁面內容的緩存,避免相同地址下產生多次請求
- 處理好重定向
- 通過Chrome瀏覽器的F12功能進行界面標籤的檢索,一般找對應內容的class/id/tag等,判斷可以根據tag的attribute進行篩選。當然如果Network能直接看到接口地址是最好的
- 通過恰當的XML解析庫去解析Html標籤,或者獲取到的接口進行請求即可
- 對爬取到的數據進行存數據庫或者展示在UI頁面上
對於重定向下面有段代碼,進行感受下
<html>
<head></head>
<body>
<script language="javascript">var url='';url= '2706' + url;url='_578'+url;url= '2522' + url;url= '9380' + url;url= '3415' + url;url= 'e5' + url;url= '555b' +url;url= '7e2' + url;url= 'd94' + url;url= 'b080' + url;url= '085bda4'+url;url= 'c0bc' + url;url= '=35ba' + url;url= '_CBK' + url;url= 't&_' +url;url= '&f=3&l=' + url;url= '1' + url;url= '='+ url;url= 'p' +url;url='?'+ url;url='sp'+ url;url='/w.a'+ url;;window.location=url;</script>
</body>
</html>
<!--對於這種如果只是短時間爬取請使用正則,如果長期的話,那麼需要使用下面這種方式更穩定。
js很靈活,對網頁開發人員來說,換這個代碼形式是輕而易舉的事情-->
2.瀏覽器模擬請求式
當然你也可以跳過這些繁瑣的步驟,使用下列方式
- 在高級界面平臺使用一個現實或者隱藏的WebView
- 對瀏覽器中的源代碼進行攔截,在C#中使用WebBrowser,JavaFx中的WebView,Swing中的JWebBrowser,Android中的WebView,或者Flutter中的webview_flutter或者flutter_webview_plugin插件。攔截的方式可以是通過JavaScript橋接的方式進行對頁面的輸出(Android和Flutter下),或者直接通過API獲取C#
- 通過這種方式有個好處,那就是不用處理某些網站防爬蟲的機制,比如第一個訪問的頁面僅僅嵌入了一段跳轉的代碼,而第二個頁面又是跳轉的代碼(JavaScrip的window.location 或者 meta刷新標籤),這是很煩人的處理
這樣的方式有好處但是頁有缺點,那就是相比第一種會請求很多不必要的資源,比如圖片,Js等等文件。所以一般很少有用這種
爬蟲項目
1.迅雷賬號抓取器(C# WinForm)
2.AD公司所有可申請樣片芯片爬取(Java)
3.QQ音樂爬取(Python)
4.NASA圖片獲取
5.股票實時曲線
Python將數據處理,通過WebSocket傳給H5用於展示
6.腳本之家電子書爬蟲(Android APP)
7.多個圖片網站爬蟲(Android)
包含ACG動漫,美女圖片資源網站等網站的聚合。
他們都一般形式是Tab分類+列表+圖片詳情頁,接口編程,只需處理解析部分代碼
頁面是單頁一張圖片,我們是展示所有圖片,並且支持縮放查看大圖(不擔心OOM),一鍵下載和分享功能
8.Flutter美女圖片爬蟲(Flutter)
特點:
- 漂亮的UI,操作更加便捷,手機端查看,支持iOS和Android
- 支持一鍵下載到文件夾,查看大圖,左右滑動切換分類,漂亮的Loading
- 支持瀏覽器打開,分享功能
電影天堂助手(Flutter)
這或許是個人項目中我做過的最漂亮的APP
特點:
- 漂亮的UI,操作更加便捷,手機端查看,支持iOS和Android;
- UI設計均出自我的手,我本身具有紮實的PS技能和審美功底;
- 支持篩選,搜索,一鍵喚起迅雷下載(邊看邊播),這可能是最友好的方案;
- 支持從圖片取色,類似Android中的Palette API,來生成詳情頁的背景色;
- 支持查看網頁源碼,外部瀏覽器查看,二維碼分享,清空緩存,訪問接口數統計等功能
說起這個還是有段曲折的經歷,本想通過HttpCanary來抓包,結果接口地址也抓取到了,但是其中有個
x-request-key參數一直摸不着頭腦,然後反編譯該網站apk,dex2jar,jdui查看,發現這個key來自於本地庫so文件中,摸不着頭腦,本人缺乏反編譯so文件的能力,於是GitHub去搜索了下,發現該網站爬蟲最火的那個Android原生應用使用了他們自己修改過的so,且封裝成爲了Library,可以直接調用,但是我下載Demo後發現,這個接口有頻繁訪問限制,所以這很影響用戶體驗,所有我還是使用爬蟲式去訪問吧。於是做了下面這個APP,此時本人Flutter功底已經相當成熟(這個APP開發到現在只花了48小時時間),Flutter開發很快,對於快速打造一個跨平臺又好看的應用十分方便(記得我是2019年12月中才做公司的Flutter項目,那個時候是邊做邊學,我反對看視頻的學習方式,太慢!當你有個多個語言的基礎,你會發現那個主系的語言(比如Java)相似的你會學起來很快,而你更多是去學習下Flutter本身的框架結構,和各種Android中的實現方式)。
有人問:你不是大廢周折嗎?直接通過手機瀏覽器訪問不是一樣嗎?
我回答:你錯了,原因有三:
第一,這個網站看起來就像是上個世紀的風格,我的應用UI水平不能說最好,但是也是我精心打磨,裏面包含了我的很多想法,我之前做過很多Logo,海報設計,我對TerribleUI敏感,見過很多好看的頁面設計;
第二,我不希望通過瀏覽器去輸入網址,瀏覽器導航當返回又進入新的頁面會重新加載,而我的應用可以直接取緩存,看過的頁面不會加載第二次;
第三,我很享受用盡量少的腳本去處理一些繁瑣的事情的過程
9.某查查批量查詢企業信息並存表格(Python)
10.搶房源(Python)
這個是一鍵搶房源的神器,到點自動搶房源