<rp id="wnpn7"><ruby id="wnpn7"></ruby></rp>
<progress id="wnpn7"><track id="wnpn7"><rt id="wnpn7"></rt></track></progress>
<ruby id="wnpn7"></ruby>
<ruby id="wnpn7"><blockquote id="wnpn7"><div id="wnpn7"></div></blockquote></ruby>

    1. <em id="wnpn7"><ruby id="wnpn7"><input id="wnpn7"></input></ruby></em>
      1. <button id="wnpn7"><acronym id="wnpn7"></acronym></button><button id="wnpn7"><acronym id="wnpn7"></acronym></button>

        <rp id="wnpn7"><acronym id="wnpn7"></acronym></rp>

        <li id="wnpn7"><object id="wnpn7"><u id="wnpn7"></u></object></li>
        VB.net 2010 視頻教程 VB.net 2010 視頻教程 python基礎視頻教程
        SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
        當前位置:
        首頁 > 編程開發 > c#教程 >
        • DotNet應用之爬蟲入門系列(一):從.Net走進爬蟲世界

        本站最新發布   C#從入門到精通
        試聽地址  
        http://www.squ68.com/eschool/CSharpxin3721/

        前言

        人類從21世紀還未開始的時候,就進入了“信息大爆炸”的時代。豐富的信息讓人眼花繚亂的同時,信息的獲取和檢索又成了重大難題。想想以前剛認字的時候,你需要買一本字典,按照拼音或者筆畫去檢索,最終獲取你想要查閱的漢字。如今信息的數量級和時效性,已經不是那幾千幾萬個漢字所能匹敵,也不是一本厚厚的字典就能包容得下的。所以,今天查字典已經不再是大多數人的第一選擇,而搜索引擎則成為了信息獲取領域當之無愧的霸主。從你點擊搜索按鈕的一瞬間,在1s內瀏覽器就會為你呈現關鍵詞搜索的網頁結果,其中涉及了太多的互聯網技術,讓人感嘆科技發展的日新月異。而網絡爬蟲技術,正是搜索引擎的基礎技術之一。

        什么是網絡爬蟲

        寬泛地說,所有“自動化”獲取信息的技術,都是爬蟲技術的一部分。比如使用按鍵精靈自動翻頁,甚至使用機械臂去模擬鍵盤、鼠標的點擊,其實都可以理解為是一種爬蟲技術。但一般來說,爬蟲界的主體還是依賴于互聯網和程序本身,其主要對象是網頁和日益流行的App,主要手段則是通過模擬瀏覽器或客戶端的訪問來自動化獲取信息。搜索引擎正是非常典型的網頁爬蟲應用,它通過爬蟲技術來獲取各個網站的信息,再通過復雜的分類、檢索算法和分布式存儲,讓原本爆炸的信息可以以一種相對有條理的面貌呈現到用戶眼前。我們可以狹義地認為,互聯網和爬蟲是唇齒相依的。

        爬蟲技術門檻如何

        很低。往往談某領域入門很容易,都可能會讓該領域老手們覺得受到了侮辱。但細想來,大可不必。比如.Net平臺的親兒子語言C#,公認的好學易上手,還因為是當年語言界當之無愧的“拖控件之王”被黑至今,可謂門檻低到讓一些人看不起。然而事實上是,它的學習曲線其實很陡峭,當你用它去做越高級、越復雜的項目,宏觀上涉及到超脫語言的概念越多、微觀上涉及到底層的細節越多。爬蟲亦是如此。

        當然,我應當在此定義一下我心中的爬蟲入門標準,盡管肯定會有爭議,但并不妨礙技術上的交流。我心中的爬蟲入門標準是:可以獨立完成一個簡單的、完整的網頁爬蟲程序

        而完整的爬蟲程序包括:

        1. 對方網站的各種請求參數;
        2. 程序獲取正確響應的手段;
        3. 從響應文本提取所需信息的手段;
        4. 持久化存儲的手段。

        這也基本對應了爬蟲程序編寫工作的流程:

        1. 查看對方網站,分析獲取所需信息的請求及參數;
        2. 編寫程序模擬瀏覽器請求獲取正確、有效的響應;
        3. 編寫從字符串文本到實體化對象的邏輯代碼(可以跟2互換順序);
        4. 數據持久化(對接數據庫等)。

        相對應地,所需要的技術基礎如下:

        1. 學習如何查看瀏覽器和網站之間互動的請求,包括學習使用瀏覽器調試工具、學習諸如Fiddler或Charles等抓包工具;掌握Http/Https基礎知識;
        2. 掌握一門編程語言;掌握該平臺上自帶或第三方提供的Http工具庫;
        3. 了解Json、Html的相關知識;掌握該平臺上自帶或第三方提供的文本解析庫;
        4. 了解數據庫知識;掌握該平臺上自帶或第三方提供的數據存儲庫。

        這些技術基礎,對大部分入門新手來說,好像看上去很多的樣子,容易產生畏難情緒。但其實最重要和優先的,是“學習分析請求”和“掌握一門編程語言”;其他的從陌生到初步了解,基本上就一兩天的工夫。更需要提醒的是,這些技術不是網絡爬蟲的專屬技術,而是適用性非常廣泛的“主流知識”,行業必備,學習的性價比無敵。

        既然爬蟲門檻這么低,適不適合我

        這是一個非常嚴肅的話題。因為爬蟲門檻較低,很多人并非把它當作主業,寫爬蟲往往是因為工作上某個臨時任務、生活中想薅個羊毛、幫朋友寫個工具等等。這時候爬蟲通常是小規模的,對象往往是單個網站,數據量、請求量也是非常小的,對程序的運行效率、代碼的可維護性要求都是隨心的;而專門的爬蟲崗位則會更具有挑戰性——

        1. 可能需要從多個網站、多個網頁獲取所需數據并整合,爬取的邏輯和過程會更加復雜;
        2. 爬取對象可能具有很強的反爬手段;
        3. 所需數據的體量可能都是按十萬、百萬、千萬、億計,相應的請求量也可能會榨干網絡帶寬;
        4. 數據可能具有較強的時效性,對程序獲取數據的效率有較高的要求;
        5. 較大的數據量、較快的爬取速度,相應地對數據存儲的要求也提高了;
        6. 對代碼的可維護性有一定的要求。

        當爬蟲成為專門的崗位時,那么入門的那些知識,就只是冰山一角了(本系列由于是入門向,不會過多涉獵非基礎的知識,具體的還需要讀者遇到了再自行學習)。所以,判斷自己適不適合做一名爬蟲工程師,我個人認為有以下三點思考可供讀者參閱:

        1. 我喜不喜歡“多選項”開發?爬蟲業務的需求通常就是數據的獲取和處理,但業務不會告訴你怎么獲取,你可以選擇PC端網頁、也可以選擇移動端,或者App,或者其他途徑。一切由你自己決定,沒有對和錯,只有好與更好。在獲取最終結果之前,一切都是不確定,你不得不一直尋找路徑,各種嘗試,直到成功、放棄或者……跑路(手動滑稽)。
        2. 我喜不喜歡“被動式”開發?如果對方網站一直不變化,爬蟲程序一直有效,那么很少會有業務上的更改,爬蟲崗位會非常的輕松愉快。但事與愿違,爬和反爬永遠都是歡喜冤家。你可能辛辛苦苦寫好了爬蟲程序,還沾沾自喜自己代碼寫得有條有理,結果第二天就發現對方網站修改了反爬策略——得,繼續頂著業務節點壓力改代碼,互相傷害唄。你需要有“與人斗,其樂無窮”的覺悟,這是一個真正的爬蟲愛好者所必備的覺悟。
        3. 我喜不喜歡“被動式”學習?這是爬蟲崗位對從業者最高的要求。隨著瀏覽器性能的提高、前端技術的發展以及人工智能的應用,反爬蟲技術近年來發展迅速,雙方的力量彼消此漲,爬蟲技術迎來了更大的挑戰。你可能需要像前端一樣了解Javascript、了解瀏覽器底層,需要像安卓工程師一樣了解安卓平臺,需要像逆向工程師一樣了解反編譯……這才是爬蟲技術的內核——破解、對抗。我曾看過這么一句話:“爬蟲的最高境界就是,所見即所得”。而為了達到這一境界,你所需涉獵的,肯定會橫跨多個平臺、多個技術領域,且深度至少要達到該平臺、領域的平均水平。而最關鍵的是,這些當中的絕大部分,應該都不是你當初剛入行時就能想得到去接觸去學習的,甚至有些是你知道了也沒有興趣的,所以我稱之為“被動式”學習。到了這時候,如果你還是覺得爬蟲很有趣,依然熱愛這個崗位,不用多說了,你就是爬蟲界的“天選之人”。

        如果前兩個問題你就開始猶豫了,我不建議你把爬蟲當作主業。而如果三個問題都是“YES”,那么趕緊學起來吧,相信爬蟲技術給你帶來的待遇回報、成就感和快樂,一定會對得起你的付出(記得到時候多寫寫技術文章,讓我漲漲姿勢)。

        教練,我想寫爬蟲!用什么編程語言合適

        上面也提到過,其實爬蟲技術的核心并不是用什么語言、庫,而是“破解、對抗”的技術。那么語言的意義在哪兒呢?為什么有人要寫什么爬蟲框架?答案是——

        它們能保證你用20%的精力就可以做出爬蟲程序80%的部分,讓你可以把更多的心思放在破解、對抗上。

        一個爬蟲程序往往只有20%的代碼,是真正核心的部分,是你花了80%的精力去探索、去思考得來的解決方案。剩下的80%,基本不是爬蟲技術的專屬模塊,而是通用技術的一部分,例如:

        • 優秀的編程環境
        • 優秀的多線程/并行支持
        • 優秀的異步編程體驗
        • 優秀的網絡編程體驗
        • 優秀的Json/Html序列化支持
        • 豐富的加解密等各類算法庫
        • 良好的社區支持
        • ……

        所以,選擇一門合適的編程語言,可以讓爬蟲開發輕松,代碼優雅,程序運行高效。目前來看,Python似乎已經成了爬蟲界的主流,到處都能看到“學Python走向爬蟲/大數據工程師”的培訓廣告,亦或者《使用Python寫一個xx網站爬蟲》的文章。我無意引入語言之爭,Python這么流行,自有它的優點,易學易上手,且有豐富的HTTP庫支持和良好的社區支持等等。但這不代表它一定就是寫爬蟲的最佳之選;或者說,寫爬蟲還可以有其他優秀的語言可供選擇,比如本文推薦的C#。

        C#一直是.Net平臺的第一語言(俗稱微軟“親兒子”語言),它不但具有上述各項優秀的支持和體驗(尤其是多線程/并行/異步編程支持),而且還一直發展自己的語言特性(隨著.Net Core 3.0的臨近,C#也即將發布8.0的新特性,結合“宇宙第一IDE”的Visual Studio,將帶來更美妙的編程體驗喲!——本條$5,希望微軟盡快打錢到我賬上)。另外,這些年來.Net Core平臺的發展和優化,豐富了.Net自帶的類庫和API,也使得.Net開發程序的性能也有了極大的提高。由C#入坑爬蟲的另一個好處是,以后有空可以去學習.Net能做的一切,桌面開發、網站開發、移動端開發……是的,天地很大,看你造化。

        說回正題,在編寫爬蟲程序方面,選擇哪一門合適的編程語言見仁見智(還有Java/Go等等,我感覺這方面說多了容易引戰啊,還是扣題為妙),所以編程語言上的推薦到此為止。而筆者認為,對C#這門優秀的靜態編程語言來說,寫爬蟲實乃“張飛耍扛子——輕而易舉”。如題,接下來本系列的文章,我將使用C#帶領讀者們“從.Net走進爬蟲世界”,下期見^.^!

        相關教程
                
        免费看成年人视频大全_免费看成年人视频在线观看