<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python爬蟲知識點梳理

          共 2940字,需瀏覽 6分鐘

           ·

          2021-10-23 05:11

          ↑?關注 + 星標?,每天學Python新技能

          后臺回復【大禮包】送你Python自學大禮包


          學任何一門技術,都應該帶著目標去學習,目標就像一座燈塔,指引你前進,很多人學著學著就學放棄了,很大部分原因是沒有明確目標,所以,在你準備學爬蟲前,先問問自己為什么要學習爬蟲。有些人是為了一份工作,有些人是為了好玩,也有些人是為了實現(xiàn)某個黑科技功能。不過可以肯定的是,學會了爬蟲能給你的工作提供很多便利。

          作為零基礎小白,大體上可分為三個階段去實現(xiàn),第一階段是入門,掌握必備基礎知識,比如Python基礎、網(wǎng)絡請求的基本原理等,第二階段是模仿,跟著別人的爬蟲代碼學,弄懂每一行代碼,熟悉主流的爬蟲工具,第三階段是自己動手,到了這個階段你開始有自己的解題思路了,可以獨立設計爬蟲系統(tǒng)。

          爬蟲涉及的技術包括但不限于熟練一門編程語言(這里以 Python 為例) HTML 知識、HTTP 協(xié)議的基本知識、正則表達式、數(shù)據(jù)庫知識,常用抓包工具的使用、爬蟲框架的使用、涉及到大規(guī)模爬蟲,還需要了解分布式的概念、消息隊列、常用的數(shù)據(jù)結構和算法、緩存,甚至還包括機器學習的應用,大規(guī)模的系統(tǒng)背后都是靠很多技術來支撐的。數(shù)據(jù)分析、挖掘、甚至是機器學習都離不開數(shù)據(jù),而數(shù)據(jù)很多時候需要通過爬蟲來獲取,因此,即使把爬蟲作為一門專業(yè)來學也是有很大前途的。

          那么是不是一定要把上面的知識全學完了才可以開始寫爬蟲嗎?當然不是,學習是一輩子的事,只要你會寫 Python 代碼了,就直接上手爬蟲,好比學車,只要能開動了就上路吧,寫代碼可比開車安全多了。

          用 Python 寫爬蟲,首先需要會 Python,把基礎語法搞懂,知道怎么使用函數(shù)、類、list、dict 中的常用方法就算基本入門。接著你需要了解 HTML,HTML 就是一個文檔樹結構,網(wǎng)上有個 HTML 30分鐘入門教程 https://deerchao.net/tutorials/html/html.htm 夠用了。然后是關于 HTTP 的知識,爬蟲基本原理就是通過網(wǎng)絡請求從遠程服務器下載數(shù)據(jù)的過程,而這個網(wǎng)絡請求背后的技術就是基于 HTTP 協(xié)議。作為入門爬蟲來說,你需要了解 HTTP協(xié)議的基本原理,雖然 HTTP 規(guī)范用一本書都寫不完,但深入的內(nèi)容可以放以后慢慢去看,理論與實踐相結合。

          網(wǎng)絡請求框架都是對 HTTP 協(xié)議的實現(xiàn),比如著名的網(wǎng)絡請求庫 Requests 就是一個模擬瀏覽器發(fā)送 HTTP 請求的網(wǎng)絡庫。了解 HTTP 協(xié)議之后,你就可以專門有針對性的學習和網(wǎng)絡相關的模塊了,比如 Python 自帶有 urllib、urllib2(Python3中的urllib),httplib,Cookie等內(nèi)容,當然你可以直接跳過這些,直接學習 Requests 怎么用,前提是你熟悉了 HTTP協(xié)議的基本內(nèi)容,數(shù)據(jù)爬下來,大部分情況是 HTML 文本,也有少數(shù)是基于 XML 格式或者 Json 格式的數(shù)據(jù),要想正確處理這些數(shù)據(jù),你要熟悉每種數(shù)據(jù)類型的解決方案,比如 JSON 數(shù)據(jù)可以直接使用 Python自帶的模塊 json,對于 HTML 數(shù)據(jù),可以使用 BeautifulSoup、lxml 等庫去處理,對于 xml 數(shù)據(jù),除了可以使用 untangle、xmltodict 等第三方庫。

          爬蟲工具里面,學會使用 Chrome 或者 FireFox 瀏覽器去審查元素,跟蹤請求信息等等,現(xiàn)在大部分網(wǎng)站有配有APP和手機瀏覽器訪問的地址,優(yōu)先使用這些接口,相對更容易。還有 Fiddler 等代理工具的使用。

          入門爬蟲,學習正則表達式并不是必須的,你可以在你真正需要的時候再去學,比如你把數(shù)據(jù)爬取回來后,需要對數(shù)據(jù)進行清洗,當你發(fā)現(xiàn)使用常規(guī)的字符串操作方法根本沒法處理時,這時你可以嘗試了解一下正則表達式,往往它能起到事半功倍的效果。Python 的 re 模塊可用來處理正則表達式。這里也推薦一個教程:Python正則表達式指南 https://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

          數(shù)據(jù)清洗完最終要進行持久化存儲,你可以用文件存儲,比如CSV文件,也可以用數(shù)據(jù)庫存儲,簡單的用 sqlite,專業(yè)點用 MySQL,或者是分布式的文檔數(shù)據(jù)庫 MongoDB,這些數(shù)據(jù)庫對Python都非常友好,有現(xiàn)成的庫支持,你要做的就是熟悉這些 API 怎么使用。

          從數(shù)據(jù)的抓取到清洗再到存儲的基本流程都走完了,也算是基本入門了,接下來就是考驗內(nèi)功的時候了,很多網(wǎng)站都設有反爬蟲策略,他們想方設法阻止你用非正常手段獲取數(shù)據(jù),比如會有各種奇奇怪怪的驗證碼限制你的請求操作、對請求速度做限制,對IP做限制、甚至對數(shù)據(jù)進行加密操作,總之,就是為了提高獲取數(shù)據(jù)的成本。這時你需要掌握的知識就要更多了,你需要深入理解 HTTP 協(xié)議,你需要理解常見的加解密算法,你要理解 HTTP 中的 cookie,HTTP 代理,HTTP中的各種HEADER。爬蟲與反爬蟲就是相愛相殺的一對,道高一次魔高一丈。如何應對反爬蟲沒有既定的統(tǒng)一的解決方案,靠的是你的經(jīng)驗以及你所掌握的知識體系。這不是僅憑21天入門教程就能達到的高度。

          進行大規(guī)模爬蟲,通常都是從一個URL開始爬,然后把頁面中解析的URL鏈接加入待爬的URL集合中,我們需要用到隊列或者優(yōu)先隊列來區(qū)別對待有些網(wǎng)站優(yōu)先爬,有些網(wǎng)站后面爬。每爬去一個頁面,是使用深度優(yōu)先還是廣度優(yōu)先算法爬取下一個鏈接。每次發(fā)起網(wǎng)絡請求的時候,會涉及到一個DNS的解析過程(將網(wǎng)址轉(zhuǎn)換成IP)為了避免重復地 DNS 解析,我們需要把解析好的 IP 緩存下來。URL那么多,如何判斷哪些網(wǎng)址已經(jīng)爬過,哪些沒有爬過,簡單點就是是使用字典結構來存儲已經(jīng)爬過的的URL,但是如果碰過海量的URL時,字典占用的內(nèi)存空間非常大,此時你需要考慮使用 Bloom Filter(布隆過濾器),用一個線程逐個地爬取數(shù)據(jù),效率低得可憐,如果提高爬蟲效率,是使用多線程,多進程還是協(xié)程,還是分布式操作。


          推薦閱讀

          1. 人臉識別的時候,一定要穿上衣服,否則 ...

          2. PyCharm vs VSCode,是時候改變你的 IDE 了!

          3. 大學生上“暗網(wǎng)”發(fā)現(xiàn)“財富密碼”,結果…




          瀏覽 79
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99国产精品久久久久久久成人 | 五月婷婷在线视频 | 国产美女肏逼 | 欧美视频色网 | 一区二区三区视频在线观看 |