小鹿爬蟲系列——靜態網站頁面爬取

被迫營業系列

每次都在挖坑,CSDN上挖的坑尤其多,哈哈哈哈哈~這是一篇非書面語寫就的文章,畢竟枯燥且充實的code需要歡脫的外在來包裹,這樣的糖衣?也比較容易服用呢~

最近實習遇到一個小需求,大致是需要根據 英文地址索引具體建築物,並獲取相關信息。做爬蟲的動力是,需要手動search的地址數據比較多,經過手動驗證,獲取到有效信息的source比較固定,且目測目標網站幾乎沒有反爬策略,故而產生了爲何不生成一個小型的庫來簡化操作的想法。

 

太長不看系列:

一、目標網站分析

  如前所述,我想建一個地區建築物信息的database,經過篩選確定了hk置業作爲目標網站。

 

 

 

 

二、讀寫模塊

三、數據清洗

四、遇到的各種bug

五、下一步的嘗試及思考(挖坑真快樂!)

5.1. 提高爬取速度:

5.2.  簡單反爬取機制:

  如何應對具有反爬機制的網站,驗證碼,必須登錄,訪問限制等。這次做的小爬蟲項目裏沒有遇到這些,因爲我選擇的目標網站只是一個hk的信息展示類頁面,更具體地說是房產中介的網站。由於在實施時人工選擇了更易爬取且目標信息更清晰的靜態網站(這是一句委婉的承認自己菜的說法哈哈哈),項目繞過了這些障礙。 老實講, 這些策略在內地的很多網站上是很常見的,因爲大量的爬蟲會對網站服務器造成大量負擔,而且更容易遭受Dos攻擊。

5.2.1 關於驗證碼:

目前的解決方法是連接一個驗證碼調取網站,直接連接到它們的接口上,當然這個也需要花費一些銀子。

這一類的網站或者說,小型衆包平臺的運行邏輯,我之前大致瞭解過,他們招募了很多在線賺錢的刷單者(大致是同一批人)(螞蟻,騰訊和百度都有類似的微任務平臺,只不過他們的業務僅限於供自身業務線使用)(還有一種動態的團隊,他們負責招募固定的人員給一個basic pay,之後有需求就不斷地反饋)(這個跟人工智能火起來前期數據採集和線框數據標註的模式很像,基本上是個產業鏈了)

突破網站驗證碼的方法大致是調取這一類接口,在目標網站需要交互的部分打包發回去。這一部分仔細說來又涉及到三次握手四次揮手,在你僞裝成瀏覽器的代碼部分加一些改動,具體目標網站請求和相應的方式可能有細微差別,如果用到了我會繼續補上筆記的哈哈哈(挖坑挖坑,技術Flag兒童歡樂多)(Ps,這一塊的博客和資源寫的都還挺好的,有需要請自行google,我主要參考了這篇博客: https://blog.csdn.net/qq_40604853/article/details/83307011

5.2.2 關於模擬登錄及虛擬手機號碼進行註冊及驗證

(這一塊是另外一個產業鏈23333)

爬蟲用到的模擬註冊和突破驗證的這一點功能,一般是找一些網絡運營商提供者,或者打碼平臺之類的,我們的目的是收集需要的信息,爬取其實只是最開始的一步,作爲數據分析人員(預備的哈哈哈),由於能夠使用到的數據髒數據比較多,所以還要首先進行data cleaning工作。這一類的模擬驗證平臺,當然也是要銀子的,同樣是依據使用量買服務,有一些還不錯的試用套餐,我們小型項目是夠用了。 這一類的不想介紹太多,因爲它的用法和合法性其實都還存疑。而且順便說一句,很多虛擬的垃圾推銷電話和詐騙電話等,他們除了去非法盜取用於的個人信息外,還會使用到這一類的平臺進行撥出。(挖坑挖坑,關於他們撥出電話這一塊其實還有基站劫持等技術,如果你學過通信相關的知識可能會比較熟悉,歡迎入坑哈哈哈)

 

5.2.3 關於訪問限制;

這就不得不提到IP代理池:

先說結論,IP代理可以選擇是否告訴服務器你使用了代理,高級一點的使用是完全隨機模擬瀏覽器訪問,讓對方服務器認不出來你用了代理,這樣就可以跟正常點擊瀏覽進行相同的操作路徑。

這一部分在早上的公交上看了一部分,得到的結論是:從成本上講,有兩種選擇,分別是自建一個Ip池,爬取並蒐集更新免費IP地址(付費IP池的試用部分),使用的時候rand一下就可以,或者直接花個幾十元錢買幾個小時的代理,基本上小型網站應該夠用。 從效率和可用性上講,由於爬取到的免費池太容易失效,所以不如選擇後者(此處沒有廣告,所以就不推薦好用的ip代理了,可自行谷歌,有一篇專門對比可用性的博客,鏈接我貼在這裏,請自行食用:https://cuiqingcai.com/5094.html)。 還有一種很費力不討好的方法,租個服務器自己搞代理,如果只是爬蟲玩一玩的同學,可以直接跳過,如果有時間而且有興趣,可以考慮阿里雲這種給新開發者的試用服務器,以使用量收費的機制還可以。但是要承擔使用之後反覆被阿里雲售前人員打擾的副作用(是的此處是個吐槽23333)。

關於在工程中使用IP代理的方法,可以參考這篇文章: https://blog.csdn.net/weixin_40372371/article/details/80154707

還有github上的一個項目:https://github.com/jhao104/proxy_pool

5.3. 動態網站爬取

    js+css的樣式使得網站很美觀,而且動態從服務器裏調用使得網站安全性得以提高,所以還是很多網站用js的。

或者至少有一部分組件使用了js,因爲這樣可以動態更新。這一部分的技術處理在學習教程上有提到過,我這裏重新回顧一下:

 

 

 

、、、、、、(此處放 抽取投票數的 筆記)和 byhand裏的代碼

 

 

 

 

 

5.4. 如何優雅選擇目標內容;

   剛開始接觸爬蟲的時候可能被html繁雜的佈局勸退(如果網頁設計這類的課程你還是用dream waver學的話,哈哈哈哈)

然而啃一啃HTML還是有好處的,這樣你就會覺得xml就也還好,之後用json格式存取數據的時候也會意識到他們一脈相承。 個人覺得學習時這種建立連結,似曾相識的感覺比完全陌生要一些,這樣只要在自己的知識體系裏建立link和一個差異字典就可以了。使用相關知識的時候在腦海中search一下,並比對一下差異字典,大腦做這項工作時時間複雜度幾乎是O(n)的,並且實在想不起來的時候還可以在google吖!(不適用於語言學習>=<,同一個語系下的不同種語言之間不小心講串了簡直GG,西班牙語加德語的風味並不好,摻雜法語發音味道也很詭異,尷尬的是有的時候你只能想起來西班牙語的發音但是你打算講的是英語23333,所以語言還是先努力熟練一門再在你的大腦中開一塊內存來存另外的語言,時常維護大腦裏的這塊庫到語言神經中樞的通路,不然就會變成沉默的語言庫,有口難開,跑題了23333)

如果很幸運,你需要的東西在 代碼檢查之後能夠找到,也就是直接以文字出現在某個class的內容裏,那麼你只需要多搜索幾次就可以找到。

 

 

(這裏放一張 網頁 查看源代碼,紅圈找到我們要的東西的圖)

 

 

如果你找的東西是js裏的,那麼你需要很仔細的找一找,從文件的編寫邏輯和網站建設人員的寫作習慣,還有觀察network標籤的變化。reload之後頁面會重新加載,network頁面會出現幾個峯值,那麼變化量較大的很大概率上就是網頁中變動的部分,通常也是我們需要的部分。因爲靜態的框架部分考慮到資源節約,不會被反覆刷新,也不會被反覆變更,這樣這部分對流量佔用就沒什麼貢獻,故而通過觀察network變化來尋找main document是一種很直接有效的方式。

如果以上方法你仍覺得過於繁瑣,那麼我要緬懷一個神器(  這裏需要加一些這個小工具的資料)

 

5.4.2 關於正則 

曾經它可以快速進行元素分析,這樣在各種html標籤中你的目標元素就會脫穎而出,而你所要做的就只要寫個正則把它取出來就好。

匹配url的時候經常會用到這個:

#HTML 標籤:
/^<([a-z]+)([^<]+)(?:>(.)<\/\1>|\s+\/>)$/

#Unicode 編碼中的漢字範圍:
/^[u4e00-u9fa5],{0,}$/

 

這裏提到了正則,有興趣的話可以看一下我的另一篇常用正則表達式哈哈哈:^ ^  這裏繼續挖個坑,下一步是否能完成一個 根據input 識別檢索出已有庫中的信息,並且自動清洗的小工具。 這個需求是一個很可愛很有愛的小姐姐提出來的,所以如果有人實現了也可以聯繫我啊嘿嘿~

https://blog.csdn.net/zhujialiang18/article/details/102750229

5.5. 關於存儲,mangoDB

坑再次出現了哈哈哈。

這次因爲項目不大,所以直接存到csv裏了,偷個懶偷個懶。 講個笑話:==>

python爬蟲27 | 當Python遇到MongoDB的時候,存儲av女優的數據變得如此順滑爽~

之前學了Mysql和他的一些框架,現在最多用用Sql Server,有興趣的可以看看這篇對比:

https://blog.csdn.net/SL_World/article/details/86633611

還有這篇

https://blog.csdn.net/qq_21057881/article/details/71079920

感興趣的事情總會不斷去想要深挖或者拓展,算是一種學習上的變相的貪婪算法吧,當前步 做出 當前最有策略,且不影響全局最優,接下來的事情就交給子問題去做吧哈哈哈~

 

以上,算是這次小型項目的筆記和總結,寫不動了哈哈哈~

歡迎各位大神光臨。

 

 

 

 

 

 

 

 

 

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