零基礎小白,學習Python讓你也擁有大神一般的技能!
Python爬蟲為什麼受歡迎
不僅僅有python web,更有python運維,數據分析,數據挖掘,機器學習,該有的都有了!Python熱門就業課程,讓你步入it名企,轉行跳槽如此簡單.
小白入門必讀
作為零基礎小白,我覺得首先你的安裝一下python,然後大體上可分為三個階段去實現。
第一階段
掌握必備基礎知識,比如Python基礎、網路請求的基本原理等;
第二階段
跟著別人的爬蟲代碼學,弄懂每一行代碼,熟悉主流的爬蟲工具,
第三階段
到了這個階段你開始有自己的解題思路了,可以獨立設計爬蟲系統。
爬蟲涉及的技術包括但不限於熟練一門編程語言(這裡以 Python為例)HTML知識、HTTP協議的基本知識、正則表達式、資料庫知識,常用抓包工具的使用、爬蟲框架的使用、涉及到大規模爬蟲,還需要了解分散式的概念、消息隊列、常用的數據結構和演算法、緩存,甚至還包括機器學習的應用,大規模的系統背後都是靠很多技術來支撐的。數據分析、挖掘、甚至是機器學習都離不開數據,而數據很多時候需要通過爬蟲來獲取,因此,即使把爬蟲作為一門專業來學也是有很大前途的。
那麼是不是一定要把上面的知識全學完了才可以開始寫爬蟲嗎?當然不是,學習是一輩子的事,只要你會寫 Python代碼了,就直接上手爬蟲,好比學車,只要能開動了就上路吧,寫代碼可比開車安全多了。
用 Python寫爬蟲
首先需要會 Python,把基礎語法搞懂,知道怎麼使用函數、類、list、dict中的常用方法就算基本入。
關於 HTTP的知識
一、web
?1、顯示web頁面:web瀏覽器從web伺服器獲取文件資源從而顯示web頁面。
?2、客戶端:發送請求獲取伺服器資源的web瀏覽器都可以稱為客戶端。
?3、HTTP:客戶端與伺服器端進行通信是用的HTTP協議(超文本傳輸協議),可以說web是建立在HTTP協議上通信的。
4、WWW:萬維網也可簡稱為web,現在提出了三項WWW構建技術:
????1、將SGML(標準通用標記語言)作為頁面的文本標記語言的超文本標記語言(HTML)
????2、作為文檔傳輸協議的HTTP
????3、指定文檔所在位置的URL(統一資源定位符)
?5、瀏覽器大戰:第一次:網景通信公司和微軟;第二次:Mozilla的Firefox和微軟
?6、目前主流的HTTP版本是HTTP/1.1
二、網路基礎
?1、協議(protocol):不同的硬體操作系統之間通信所需要的一種規則就是協議
?2、TCP/IP協議族:所有與互聯網相關聯的協議的集合(HTTP是其一個子集)。也有說法說單指TCP和IP兩種協議
?3、TCP/IP協議的分層管理(使得有改動的時候只需要替換部分不用去替換整體:
????1、應用層:決定了向用戶提供應用服務時通信的活動
??????FTP(文件傳輸協議)、HTTP、DNS(域名系統)服務處於該層
????2、傳輸層:提供處於網路中兩台計算機之間的數據傳輸
??????TCP(傳輸控制協議)、UDP(用戶數據報協議)處於該層
????3、網路層:處理網路上流動的數據包(數據包是網路傳輸的最小流動單位),即選擇傳輸路線。
???????IP協議位於該層
????4、數據鏈路層:處理連接網路的硬體部分(如設備驅動、網卡(即NIC:網路適配器)、光纖)
4、IP協議(網際協議):即將各種數據包傳給對方
????要確保確實傳輸到對方那裡需要滿足各種條件,重要的條件有兩個:
??????1、IP地址
??????2、MAC地址(網卡所屬的固定地址)
????傳輸過程中會用到ARP協議,它是一種解析地址的協議,通過通信雙方的IP地址可以反查出對應的MAC地址
5、TCP協議:提供可靠的位元組流服務(即將大塊的數據切割成報文段為單位的數據包進行管理)
?????簡單來說就是將大數據分割為容易傳輸的小數據塊,而且其能確認數據最終是否送到了對方,這裡是通過三次 握手策略來確認的,SYN->SYN/ACK->ACK 斷開時:伺服器FIN->客戶端ACK
6、DNS服務:提供域名和IP地址之間的的解析服務
7、URI(統一資源標識符)和URL(統一資源定位符)
??URI是用字元串來標識某一互聯網資源,URL表示資源的地點,URL是URI的子集
三、HTTP協議
?1、HTTP是無狀態協議,對發送過的請求以及響應不做持久化處理,沒有保存之前發送過的請求和響應的功能。
?2、HTTP方法:告知伺服器意圖
???GET:獲取資源
???POST:傳輸實體主體
???PUT:傳輸文件
???DELETE:刪除文件
???HEAD:獲得報文首部
???TRACE:追蹤路徑
???OPTIONS:詢問支持的方法
???CONNECT:要求用隧道協議連接代理
?3、持久連接:節省通信量(keep-alive)
???之前的HTTP協議初始版本中每進行一次HTTP通信就要斷開一次TCP連接
???解決這種問題採用了持久連接,一次連接可以多次通信。
?4、管線化:(pipelining):使得不用等待響應就可以發送下一個請求啊,可以同時並發多個請求不用一個個等了
?5、HTTP報文:用於HTTP協議交互的信息。客戶端的叫請求報文,伺服器端的叫響應報文
???HTTP報文分為兩塊:報文首部、報文主體(不一定要有)
?????報文首部:請求報文中分為:請求行,請求首部欄位,通用首部欄位,實體首部欄位
?????響應報文中分為:狀態行,響應首部欄位,通用首部欄位,實體首部欄位
數據清洗
數據清洗完最終要進行持久化存儲,你可以用文件存儲,比如CSV文件,也可以用資料庫存儲,簡單的用 sqlite,專業點用MySQL,或者是分散式的文檔資料庫 MongoDB,這些資料庫對Python都非常友好,有現成的庫支持,你要做的就是熟悉這些 API怎麼使用。
進階之路
從數據的抓取到清洗再到存儲的基本流程都走完了,也算是基本入門了,接下來就是考驗內功的時候了,很多網站都設有反爬蟲策略,他們想方設法阻止你用非正常手段獲取數據,比如會有各種奇奇怪怪的驗證碼限制你的請求操作、對請求速度做限制,對IP做限制、甚至對數據進行加密操作,總之,就是為了提高獲取數據的成本。這時你需要掌握的知識就要更多了,你需要深入理解 HTTP協議,你需要理解常見的加解密演算法,你要理解 HTTP中的cookie,HTTP代理,HTTP中的各種HEADER。爬蟲與反爬蟲就是相愛相殺的一對,道高一次魔高一丈。
如何應對反爬蟲沒有既定的統一的解決方案,靠的是你的經驗以及你所掌握的知識體系。這不是僅憑21天入門教程就能達到的高度。
進行大規模爬蟲,通常都是從一個URL開始爬,然後把頁面中解析的URL鏈接加入待爬的URL集合中,我們需要用到隊列或者優先隊列來區別對待有些網站優先爬,有些網站後面爬。每爬去一個頁面,是使用深度優先還是廣度優先演算法爬取下一個鏈接。每次發起網路請求的時候,會涉及到一個DNS的解析過程(將網址轉換成IP)為了避免重複地 DNS解析,我們需要把解析好的 IP緩存下來。URL那麼多,如何判斷哪些網址已經爬過,哪些沒有爬過,簡單點就是是使用字典結構來存儲已經爬過的的URL,
爬蟲工具
爬蟲工具裡面,學會使用Chrome或者FireFox瀏覽器去審查元素,跟蹤請求信息等等,現在大部分網站有配有APP和手機瀏覽器訪問的地址,優先使用這些介面,相對更容易。還有 Fiddler等代理工具的使用。
入門爬蟲,學習正則表達式並不是必須的,你可以在你真正需要的時候再去學,比如你把數據爬取回來後,需要對數據進行清洗,當你發現使用常規的字元串操作方法根本沒法處理時,這時你可以嘗試了解一下正則表達式,往往它能起到事半功倍的效果。Python的 re模塊可用來處理正則表達式。
TAG:Python |