我寫過的爬蟲

個人項目

免責聲明:本文章涉及到的應用僅供學習交流使用,不得用於任何商業用途,數據來源於互聯網,與本人無關!由此引發的任何法律糾紛與本人無關!

寫在前面:我一直在寫爬蟲,無論是最開始的大學時期的C# WinForm爬蟲,還是Java爬蟲,又或是Python爬蟲,Android爬蟲,到今天的Flutter爬蟲。

爬蟲

1.接口請求式

他們的原理始終都是一樣的,那就是:

  1. 設置正常的瀏覽器User-Agent
  2. 處理好頁面內容的緩存,避免相同地址下產生多次請求
  3. 處理好重定向
  4. 通過Chrome瀏覽器的F12功能進行界面標籤的檢索,一般找對應內容的class/id/tag等,判斷可以根據tag的attribute進行篩選。當然如果Network能直接看到接口地址是最好的
  5. 通過恰當的XML解析庫去解析Html標籤,或者獲取到的接口進行請求即可
  6. 對爬取到的數據進行存數據庫或者展示在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.瀏覽器模擬請求式

當然你也可以跳過這些繁瑣的步驟,使用下列方式

  1. 在高級界面平臺使用一個現實或者隱藏的WebView
  2. 對瀏覽器中的源代碼進行攔截,在C#中使用WebBrowser,JavaFx中的WebView,Swing中的JWebBrowser,Android中的WebView,或者Flutter中的webview_flutter或者flutter_webview_plugin插件。攔截的方式可以是通過JavaScript橋接的方式進行對頁面的輸出(Android和Flutter下),或者直接通過API獲取C#
  3. 通過這種方式有個好處,那就是不用處理某些網站防爬蟲的機制,比如第一個訪問的頁面僅僅嵌入了一段跳轉的代碼,而第二個頁面又是跳轉的代碼(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)

這個是一鍵搶房源的神器,到點自動搶房源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章