寫網絡爬蟲程序的難度是怎麼分等級的

2020-12-11 電子發燒友

寫網絡爬蟲程序的難度是怎麼分等級的

猿人學 發表於 2020-02-05 11:49:55

寫爬蟲,是一個非常考驗綜合實力的活兒。有時候,你輕而易舉地就抓取到了想要的數據;有時候,你費盡心思卻毫無所獲。

好多Python爬蟲的入門教程都是一行代碼就把你騙上了「賊船」,等上了賊船才發現,水好深~比如爬取一個網頁可以是很簡單的一行代碼:

r = requests.get('http://news.baidu.com')

非常的簡單,但它的作用也僅僅是爬取一個網頁,而一個有用的爬蟲遠遠不止於爬取一個網頁。

一個有用的爬蟲,只需兩個詞來衡量:

數量:能否抓全所有該類數據

效率:抓完所有數據需要多久一天還是一個月

但要做到這兩個詞,卻是要下很多功夫。自己下功夫是一方面,也很重要的是你要抓全的目標網站給你出了多少難題。綜合起來,就寫一個爬蟲有多少難度。

網絡爬蟲難度一:只需爬取html網頁但要上規模

這裡我們舉個新聞爬蟲的例子。大家都用過百度的新聞搜索吧,我就拿它的爬蟲來講講實現上的難度。

新聞網站基本上不設防,新聞內容都在網頁的html代碼裡了,抓全一個網頁基本上就是一行的事情。似乎聽上去很簡單,但對於一個搜尋引擎級的爬蟲,就不那麼簡單了,要把幾千幾萬家新聞網站的新聞都及時抓取到也不是一件容易的事情。

我們先看看新聞爬蟲的簡單流程圖:

從一些種子網頁開始,種子網頁往往是一些新聞網站的首頁,爬蟲抓取網頁,從中提取網站URL放到網址池再進行抓取。這樣就從幾個網頁開始,不斷擴展到其它網頁。爬蟲抓取的網頁也越來越多,提取出的新網網址也會成幾何級數增長。

如何能在最短時間抓取更多網址?

這就是其中一個難度,這不是目標網址帶來的,而是對我們自身自願的考驗:

我們的帶寬夠嗎

我們的伺服器夠嗎,單臺不夠就要分布式

如何能及時抓取到最新的新聞?

這是效率之外的另一個難度,如何保證及時性?幾千家新聞網站,時刻都在發布最新新聞,爬蟲在織網式抓取「舊」新聞的同時,如何兼顧獲取「新」新聞呢?

如何存儲抓取到的海量新聞?

爬蟲織網式的爬取,會把每個網站幾年前幾十年前的新聞網頁都給翻出來,從而獲得海量的網頁需要存儲。就是存儲上的難度。

如何清理提取網內容?

從新聞網頁的html裡面快速、準確提取想要的信息數據,比如標題、發布時間、正文內容等,這又帶來內容提取上的難度。

網絡爬蟲難度二:需要登錄才能抓到想要的數據

人是貪婪的,想要的數據無窮盡,但是很多數據不是你輕易就可以獲得的。有一大類數據就是需要帳戶登錄後才能看到,也就是說,爬蟲請求時必須是登錄狀態才能抓取數據。

如何獲取登錄狀態?

老猿前面已經說過了,http協議的性質決定了登錄狀態就是一些cookies,那麼如何獲得登錄狀態就是一個非常有難度的問題。

有些網站登錄過程很簡單,把帳戶、密碼發給伺服器,伺服器驗證通過返回表示已登錄的cookies。這樣的網站,比較容易實現自動登錄,爬蟲運行過程全程無需人工幹預,你就有更多時間喝茶、聊天、上猿人學看python。

如何處理驗證碼?

然而,網站們既然要求你登錄了,他們就不會這麼輕易放過你,要做的更絕才能讓小猿們善罷甘休,那就是上驗證碼!

沒錯,就是變態的驗證碼。

有的運用社會工程,進行人工識別驗證碼;也有,通過圖像處理技術,尤其如今火熱的深度學習、人工智慧的技術,來自動識別驗證碼。

那麼,當你寫爬蟲時遇到驗證碼該怎麼辦?

網絡爬蟲難度三:異步加載甚至JavaScript解密

前面的兩個難度,都是靠我們研究數據加載過程,然後用Python代碼可以重現出來,進行抓取的。

而遇到達第三個難度時,研究數據加載過程會讓你十分痛苦、近乎崩潰。異步加載流程和伺服器來來回回好多次,最後得到的數據還要通過JavaScript解密才能看到,這都是壓垮小猿們的最後一根稻草。

有沒有終極大招可以破解呢?

網絡爬蟲難度四:APP的抓取

APP連包都抓不到

抓包是寫爬蟲組裝請求數據的基礎條件,對APP抓包的繁複度遠超網站,APP對代理抓包的檢測,對網絡請求庫的混淆,使用socket通信等阻擋了相當部分爬蟲選手。

請求Token參數的加密

APP請求參數的組裝是一個黑盒,不一窺參數的組裝流程,請求不到數據;APP repsonse回來的數據可能是二進位或編碼過,不知道如何解碼還原,抓下來數據也只能望洋興嘆。

要能正確抓取APP數據就需要具備網絡安全行業的初中級知識。

總結了一下這爬蟲的一些難度,明年應該會結合一些實際示例來講解如何破解這些不同程度的難題。

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 手把手教你寫網絡爬蟲(5):PhantomJS實戰
    本系列:《手把手教你寫網絡爬蟲(1):網易雲音樂歌單》《手把手教你寫網絡爬蟲(2):迷你爬蟲架構》
  • 用python寫網絡爬蟲的基本要點
    1、網絡爬蟲(在網絡的網站中通過python的程序模擬人工操作,下載到自己需要的資料)1、定義 :網絡蜘蛛、網絡機器人,抓取網絡數據的程序 2、總結 :用Python程序去模仿人去訪問網站,模仿得越像越好
  • 精通 Python 網絡爬蟲:網絡爬蟲學習路線
    如何才能精通Python網絡爬蟲呢?學習Python網絡爬蟲的路線應該如何進行呢?在此為大家具體進行介紹。
  • 漫談Pyspider網絡爬蟲的實踐
    總之,很早之前,我就開始規劃著寫點關於網絡爬蟲方面的文章,介紹性質的,但更重要的是,計算機以及信息科學的實踐性,所以,以一個實幹者的角度來寫,更為合適一些。在這之前,還是有必要對一些概念性的詞彙做一下梳理和科普,至少,不會讓讀者覺得突兀或者一知半解的讀著流水帳式的文字。
  • 網絡爬蟲違法?扯!繼續學習我的第一個爬蟲
    隨著資訊時代的迭代更新,人工智慧的興起,Python程式語言也隨之被人們廣泛學習,Python數據分析、Python web全棧、Python自動化運維等等都很受歡迎,其中還包括了Python爬蟲。但是很對人覺得Python爬蟲是違法的行為,也在懷疑自己到底要不要學爬蟲,之前有一篇文章特別火,就是《 只因寫了一段爬蟲,公司200多人被抓!》
  • Python新手學習網絡爬蟲要做什麼?
    爬蟲,被稱為網絡機器人,在FOAF社區中間,更經常的稱為網頁追逐者,是一種按照一定的規則,自動地抓取全球資訊網信息的程序或者腳本,主要用於搜尋引擎,它將一個網站的所有內容與連結進行閱讀,並建立相關的全文索引到資料庫中,然後跳到另一個網站。
  • Python——爬蟲
    一、什麼是網絡爬蟲在隨著大數據時代的到來,網絡爬蟲在網際網路中的地位也越來越重要。而網際網路中的數據是海量存在的,那麼我們如何自動高效地獲取網際網路中我們感興趣的信息並為我們所用就成了一個重要的問題,而爬蟲技術就是為了解決這些問題而產生的。
  • 聊聊學python轉行、具體學習方法、自學python用於辦公、寫爬蟲等...
    Python這幾年都挺火的,比如說應用於數據分析、機器學習、自動化辦公、寫爬蟲採集數據等等……因為我之前發過幾篇和python有關的推文,所以不止一個朋友加私信問我說,你是怎麼學的,能不能談一談學習的經驗和技巧。
  • 爬蟲入門到放棄01:什麼是爬蟲
    序章18年初,還在實習期的我因為工作需求開始接觸Java爬蟲,從一個網站爬取了163W條poi數據,這是我人生中寫的第一個爬蟲,也是唯一的一個Java爬蟲。後來這些poi數據也成了我畢業設計中的一部分。
  • Python3網絡爬蟲~零基礎入門01~基礎概念 2020原創
    想必大家對網絡爬蟲技術很感興趣,現在又是大數據時代,如果自行零零散散的網上學習,可能會有很多的困惑,還有就是信息的過時問題,本人打算從今天開始,從零基礎開始寫起,如果沒有什麼意外的話會一直寫到完,重點和踩坑的地方我會特殊說明,免得理解上會有困難,我會儘量用通俗的語音,儘量少用專業術語免得你還得去查什麼意思
  • 就想寫個爬蟲,我到底要學多少東西啊?
    所以很多情況下需要分析 Ajax,知道這些接口的調用方式之後再用程序來模擬。但是有些接口帶著加密參數,比如 token、sign 等等,又不好模擬,咋整呢?一種方法就是去分析網站的 JavaScript 邏輯,死摳裡面的代碼,揪出來這些參數是怎麼構造的,找出思路來了之後再用爬蟲模擬或重寫就行了。
  • python爬蟲入門-通過茅臺腳本講些爬蟲知識,應用和價值
    搶茅臺的腳本其實屬於爬蟲腳本的一類,它實現了模擬登陸,模擬訪問並抓取數據。我們從爬蟲開始來學習Python做項目,從這篇開始記錄下爬蟲相關的筆記和知識點。正文什麼是爬蟲到底什麼是爬蟲?你可以理解為爬蟲是網際網路上的一隻蜘蛛,如果遇到一些網絡數據或資源,這隻「蜘蛛」可以把這些數據和資源爬取下來。
  • 我就想寫個爬蟲,到底要學多少東西啊?
    所以很多情況下需要分析 Ajax,知道這些接口的調用方式之後再用程序來模擬。但是有些接口帶著加密參數,比如 token、sign 等等,又不好模擬,咋整呢?一種方法就是去分析網站的 JavaScript 邏輯,死摳裡面的代碼,揪出來這些參數是怎麼構造的,找出思路來了之後再用爬蟲模擬或重寫就行了。
  • 萬花筒 數學之美:圖論和網絡爬蟲
    這裡我們介紹圖論和網際網路自動下載工具網絡爬蟲 (Web Crawlers) 之間的關係。用 Google Trends來搜索一下「離散數學」這個詞,可以發現不少有趣的現象。怎樣自動下載網際網路所有的網頁呢,它要用到圖論中的遍歷(Traverse) 算法。
  • 一小時入門 Python 3 網絡爬蟲
    作者:Jack-Cui,熱愛技術分享,活躍於 CSDN 和知乎,開設的《Python3網絡爬蟲入門》、《Python3機器學習》等專欄受到好評。 聲明:本文講解的實戰內容,均僅用於學習交流,請勿用於任何商業用途!
  • Python在寫爬蟲方面有哪些優勢?
    Python是一種電腦程式設計語言,是一種動態的、面向對象的腳本語言。Python最初被設計用於編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越來越多被用於獨立的、大型項目的開發。
  • 寫一段Python爬蟲前,需要準備什麼?
    網絡爬蟲,是一種按照一定的規則,自動地抓取網站內信息的程序或者腳本。了解爬蟲的工作原理爬蟲呢,其實就是模仿正常瀏覽者去自動獲取站點中我們需要的數據,對數據進行處理,方便以後的分析或別的用途。模仿正常瀏覽者,就需要知道正常的瀏覽者都帶有什麼標示,都有什麼習慣。
  • 網絡爬蟲(一)基礎知識
    我們今天講的爬蟲呢,其實也是一種網絡檢索,就是用一個「爬蟲」來代替我們去檢索。從爬蟲這個名字我們就可以想像到它就是通過編程實現的一隻「小蟲子」在整個網際網路上爬來爬去。我們可以編寫不同的小蟲子,讓它在網絡上替我們搜集我們想要的資源。
  • 手把手教你寫網絡爬蟲:Web應用的漏洞檢測實戰篇!
    作為剛入門的安全小白,對其工作原理產生了濃厚的興趣,逐漸深層剝離Web應用漏洞檢測的本質是網絡爬蟲技術與漏洞檢測技術的結合,網絡爬蟲主要爬取網站結構並收集可能存在的攻擊面,漏洞檢測技術則是在爬蟲結果的基礎上進行針對性的修改並重放,根據伺服器響應進行判斷。在本篇文章中,我們將重點介紹爬蟲技術方面的知識。
  • 最全的 Python 反爬蟲及應對方案!
    通過User-Agent來控制訪問無論是瀏覽器還是爬蟲程序,在向伺服器發起網絡請求的時候,都會發過去一個頭文件:headers,比如知乎的requests headers。這裡面的大多數的欄位都是瀏覽器向服務表明身份用的對於爬蟲程序來說,最需要注意的欄位就是:User-Agent很多網站都會建立user-agent白名單,只有屬於正常範圍的user-agent才能夠正常訪問。