【spider】爬蟲學習路線-精通Scrapy網路爬蟲

NO IMAGE

隨著大資料時代的到來,人們對資料資源的需求越來越多,而爬蟲是一種很好的自動採集資料的手段。

那麼,如何才能精通Python網路爬蟲呢?學習Python網路爬蟲的路線應該如何進行呢?韋瑋老師在此為大傢俱體進行介紹。

1、選擇一款合適的程式語言

事實上,Python、PHP、JAVA等常見的語言都可以用於編寫網路爬蟲,你首先需要選擇一款合適的程式語言,這些程式語言各有優勢,可以根據習慣進行選擇。在此筆者推薦使用Python進行爬蟲專案的編寫,其優點是:簡潔、掌握難度低。

2、掌握Python的一些基礎爬蟲模組

當然,在進行這一步之前,你應當先掌握Python的一些簡單語法基礎,然後才可以使用Python語言進行爬蟲專案的開發。

在掌握了Python的語法基礎之後,你需要重點掌握一個Python的關於爬蟲開發的基礎模組。這些模組有很多可以供你選擇,比如urllib、requests等等,只需要精通一個基礎模組即可,不必要都精通,因為都是大同小異的,在此推薦的是掌握urllib,當然你可以根據你的習慣進行選擇。

3、深入掌握一款合適的表示式

學會了如何爬取網頁內容之後,你還需要學會進行資訊的提取。事實上,資訊的提取你可以通過表示式進行實現,同樣,有很多表示式可以供你選擇使用,常見的有正規表示式、XPath表示式、BeautifulSoup等,這些表示式你沒有必要都精通,同樣,精通1-2個,其他的掌握即可,在此建議精通掌握正規表示式以及XPath表示式,其他的瞭解掌握即可。正規表示式可以處理的資料的範圍比較大,簡言之,就是能力比較強,XPath只能處理XML格式的資料,有些形式的資料不能處理,但XPath處理資料會比較快。

4、深入掌握抓包分析技術

事實上,很多網站都會做一些反爬措施,即不想讓你爬到他的資料。最常見的反爬手段就是對資料進行隱藏處理,這個時候,你就無法直接爬取相關的資料了。作為爬蟲方,如果需要在這種情況下獲取資料,那麼你需要對相應的資料進行抓包分析,然後再根據分析結果進行處理。一般推薦掌握的抓包分析工具是Fiddler,當然你也可以用其他的抓包分析工具,沒有特別的要求。

5、精通一款爬蟲框架

事實上,當你學習到這一步的時候,你已經入門了。

這個時候,你可能需要深入掌握一款爬蟲框架,因為採用框架開發爬蟲專案,效率會更加高,並且專案也會更加完善。

同樣,你可以有很多爬蟲框架進行選擇,比如Scrapy、pySpider等等,一樣的,你沒必要每一種框架都精通,只需要精通一種框架即可,其他框架都是大同小異的,當你深入精通一款框架的時候,其他的框架了解一下事實上你便能輕鬆使用,在此推薦掌握Scrapy框架,當然你可以根據習慣進行選擇。

6、掌握常見的反爬策略與反爬處理策略

反爬,是相對於網站方來說的,對方不想給你爬他站點的資料,所以進行了一些限制,這就是反爬。

反爬處理,是相對於爬蟲方來說的,在對方進行了反爬策略之後,你還想爬相應的資料,就需要有相應的攻克手段,這個時候,就需要進行反爬處理。

事實上,反爬以及反爬處理都有一些基本的套路,萬變不離其宗,這些後面作者會具體提到,感興趣的可以關注。

常見的反爬策略主要有:

IP限制

UA限制

Cookie限制

資源隨機化儲存

動態載入技術

……

對應的反爬處理手段主要有:

IP代理池技術

使用者代理池技術

Cookie儲存與處理

自動觸發技術

抓包分析技術 自動觸發技術

……

這些大家在此先有一個基本的思路印象即可,後面都會具體通過實戰案例去介紹。

7、掌握PhantomJS、Selenium等工具的使用

有一些站點,通過常規的爬蟲很難去進行爬取,這個時候,你需要藉助一些工具模組進行,比如PhantomJS、Selenium等,所以,你還需要掌握PhantomJS、Selenium等工具的常規使用方法。

8、掌握分散式爬蟲技術與資料去重技術

如果你已經學習或者研究到到了這裡,那麼恭喜你,相信現在你爬任何網站都已經不是問題了,反爬對你來說也只是一道形同虛設的牆而已了。

但是,如果要爬取的資源非常非常多,靠一個單機爬蟲去跑,仍然無法達到你的目的,因為太慢了。

所以,這個時候,你還應當掌握一種技術,就是分散式爬蟲技術,分散式爬蟲的架構手段有很多,你可以依據真實的伺服器叢集進行,也可以依據虛擬化的多臺伺服器進行,你可以採用urllib redis分散式架構手段,也可以採用Scrapy redis架構手段,都沒關係,關鍵是,你可以將爬蟲任務部署到多臺伺服器中就OK。

至於資料去重技術,簡單來說,目的就是要去除重複資料,如果資料量小,直接採用資料庫的資料約束進行實現,如果資料量很大,建議採用布隆過濾器實現資料去重即可,布隆過濾器的實現在Python中也是不難的。

以上是如果你想精通Python網路爬蟲的學習研究路線,按照這些步驟學習下去,可以讓你的爬蟲技術得到非常大的提升。

至於有些朋友問到,使用Windows系統還是Linux系統,其實,沒關係的,一般建議學習的時候使用Windows系統進行就行,比較考慮到大部分朋友對該系統比較資料,但是在實際執行爬蟲任務的時候,把爬蟲部署到Linux系統中執行,這樣效率比較高。由於Python的可移植性非常好,所以你在不同的平臺中執行一個爬蟲,程式碼基本上不用進行什麼修改,只需要學會部署到Linux中即可。所以,這也是為什麼說使用Windows系統還是Linux系統進行學習都沒多大影響的原因之一。

本篇文章主要是為那些想學習Python網路爬蟲,但是又不知道從何學起,怎麼學下去的朋友而寫的。希望通過本篇文章,可以讓你對Python網路爬蟲的研究路線有一個清晰的瞭解,這樣,本篇文章的目的就達到了,加油!

如何學習Python?

Python上手很容易, 基本有其他語言程式設計經驗的人可以在1周內學會Python最基本的內容.
它們包括:
1.常用內建型別(int, float, bool, bytes, str, list, dict, set)的使用.
2.分支if-else 迴圈while 迭代for的語法.
3.def定義函式, 呼叫函式.
你再花1周學習些:
1.類
2.異常
此時, 有些人就在簡歷中得意的自稱”會”Python了.
但是學到如此程度, 在實際程式設計中會經常遇到挫折, 主要源自理解不夠深入, 僅僅Python語法和API層面體驗了一下.
隨意列舉一些新手普遍存在的問題:
1.不瞭解Python物件模型, 變數名, 物件概念含混.
2.不瞭解可變物件和不可變物件, 尤其是int.
3.不瞭解切片意味著拷貝, 在迴圈中大量使用, 影響效率.
4.不瞭解切片是淺拷貝還是深拷貝.
5.遇到bytes和str(2.7中的str和unicode)就頭暈.
6.經常在需要使用is的場景使用==.
7.不瞭解def是執行時執行語句, 並且是賦值語句.
8.類屬性和例項屬性混淆.
9.不瞭解在函式中修改可變物件引數會對呼叫者產生影響, 導致莫名其妙錯誤.
10.企圖在函式中修改全域性變數, 沒有使用global, 而建立了本地變數.
11.以可變物件做函式預設引數.

擁有某項技能的程式設計師的價值, 可以用學習技能所需的成本來衡量.你用2周學習達到的這種程度, 對於企業就是沒有價值的, 因為老闆可以讓一個公司裡任意其他語言的程式設計師經過2-3周的學習就能達到你現在的程度.Python的簡潔易用, 快速開發對專案有價值, 但這不是你的價值, 是Python的價值.所以提高自身價值, 也就是不讓別人輕易追上你. 以極低的成本替代你.

你只能快跑, 進一步學習, Python語言層面還需要學習下面一些內容:
1.使用生成器, 迭代器
2.函數語言程式設計, 匿名函式lambda, map, reduce, filter
3.列表解析, 字典解析, 集合解析, 生成器解析
4.運算子過載(setattr, getattr, getitem, gt, lt…)
5.property, 描述符(get, set, delete)
6.上下文管理器(enter, exit)
7.深入理解物件導向

上述都是語言層面的,屬於內功.實戰中當然也需要一些更為具體的外功, 訓練外功可以從熟悉Python標準庫開始, 這些模組能進入標準庫說明他們足夠好並且在實際專案中足夠常用, 列舉一些極為常用的:
1.正規表示式 re
2.迭代工具 itertools
3.常用資料結構 collections, heapq, array
4.處理二進位制資料 struct
5.隨機 random
6.系統呼叫 os
7.Python物件序列化 pickle
8.多程序多執行緒處理 threading, multiprocessing
9.網路 socket, urllib
10.系統引數 sys

無論練習內功或外功,結合實戰都是最好的訓練方式和檢驗手段, 可以根據個人情況以及喜好選擇, 如:
1.使用django, flask開發網站.
2.開發網路爬蟲或使用Python爬蟲框架(如scrapy).
3.寫一些自動化運維指令碼, 定時讀取某軟體log, 出現異常自動發郵件.
4.使用selenium對網站進行測試.
5.使用Python開發樹莓派小車(電機,感測器驅動).
6.使用Python開發Vim外掛, 如在vim中做一個音樂播放器.
7.使用Python做演算法題, 如leetcode.
8.opencv做影象識別.
9.使用numpy和pandas做資料處理.
10.使用機器學習庫sklearn, tensorflow做應用.
11.使用PyQt編寫桌面應用.
12.使用scipy, matplotlib做科學計算.
13.使用Python做滲透測試.
……

個人建議選擇小專案進行實訓, 有些新手上來就想定一個大目標, 做的時候很挫折, 往往半途而廢.把小東西先實現, 然後優化. 接下來新增新功能, 慢慢迭代把小東西做大. 這樣在做的時候,每實現一個小功能你都會有成就感, 激勵繼續前進.

可能經過比較漫長的一段時間, 你成為了一個熟練的Python應用程式設計師, 還有些高階話題可以繼續學習:
1.裝飾器
2.元類
這些高階話題在開發框架中經常使用, 它們可以幫你建立更靈活的程式碼.

通常自稱一個月光速學了會Python的人基本都不是天才, 只是浮躁, 目標定的比較低而已.
不要太過急功近利, 慢慢玩, 精進.
如果你覺著程式設計有趣, 成長也就不再痛苦, 祝學習愉快.

作者:
連結:https://www.imooc.com/article/15051
來源:慕課網
本文原創釋出於慕課網 ,轉載請註明出處,謝謝合作