爬蟲現在的火熱程度我就不說了,先說一下這門技術能幹什麼事兒,主要為以下三方面:
1.爬取資料,進行市場調研和商業分析
爬取知乎、豆瓣等**的優質話題內容;抓取房產**買賣資訊,分析房價變化趨勢、做不同區域的房價分析;爬取招聘**職位資訊,分析各行業人才需求情況及薪資水平。
2.作為機器學習、資料探勘的原始資料
了解爬蟲是怎麼實現的
實現簡單的資訊爬取
應對特殊**的反爬蟲措施
scrapy 與 高階分布式
了解爬蟲是怎麼實現的
大部分爬蟲都是按「傳送請求——獲得頁面——解析頁面——抽取並儲存內容」這樣的流程來進行,這其實也是模擬了我們使用瀏覽器獲取網頁資訊的過程。
簡單來說,我們向伺服器傳送請求後,會得到返回的頁面,通過解析頁面之後,我們可以抽取我們想要的那部分資訊,並儲存在指定的文件或資料庫中。
在這部分你可以簡單了解 http 協議及網頁基礎知識,比如 postget、html、css、js,簡單了解即可,不需要系統學習。
實現簡單的資訊爬取
python中爬蟲相關的包很多:urllib、requests、bs4、scrapy、pyspider 等,建議你從requests+xpath 開始,requests 負責連線**,返回網頁,xpath 用於解析網頁,便於抽取資料。
如果你用過 beautifulsoup,會發現 xpath 要省事不少,一層一層檢查元素**的工作,全都省略了。掌握之後,你會發現爬蟲的基本套路都差不多,一般的靜態**根本不在話下,像知乎、豆瓣等**的公開資訊都可以爬取下來。
當然如果你需要爬取非同步載入的**,可以學習瀏覽器抓包分析真實請求或者學習selenium來實現自動化爬取,這樣,知乎、時光網、貓途鷹這些動態的**也基本沒問題了。
你還需要了解 python 的基礎知識,比如:檔案讀寫操作:用來讀取引數、儲存爬取內容list(列表)、dict(字典):用來序列化爬取的資料條件判斷(if/else):解決爬蟲中的判斷是否執行迴圈和迭代(for ……while):用來迴圈爬蟲步驟
應對特殊**的反爬機制
爬蟲過程中也會經歷一些絕望啊,比如被**封ip、比如各種奇怪的驗證碼、useragent訪問限制、各種動態載入等等。
遇到這些反爬蟲的手段,當然還需要一些高階的技巧來應對,常規的比如訪問頻率控制、使用**ip池、抓包、驗證碼的ocr處理等等。
比如我們經常發現有的**翻頁後url並不變化,這通常就是非同步載入。我們用開發者工具去分析網頁載入資訊,通常能夠得到意外的收穫。
往往**在高效開發和反爬蟲之間會偏向前者,這也為爬蟲提供了空間,掌握這些應對反爬蟲的技巧,絕大部分的**已經難不到你了。
scrapy 與高階分布式
使用 requests+xpath 和抓包**確實可以解決很多**資訊的爬取,但是對於資訊量比較大或者需要分模組爬取的話,就會顯得寸步難行。
後來應用到了強大的 scrapy 框架,它不僅能便捷地構建 request,還有強大的 selector 能夠方便地解析 response,然而最讓人驚喜的還是它超高的效能,可以將爬蟲工程化、模組化。
學會 scrapy,自己去嘗試搭建了簡單的爬蟲框架,在做大規模資料爬取的時候能夠結構化、工程化地思考大規模的爬取問題,這使我可以從爬蟲工程的維度去思考問題。
再後來開始逐漸接觸到分布式爬蟲,這個東西聽著挺唬人,但其實就是利用多執行緒的原理讓多個爬蟲同時工作,能夠實現更高的效率。
其實學習到這裡,你基本可以說就是乙個爬蟲老司機了,外行看很難,但其實並沒有那麼複雜。
因為爬蟲這種技術,既不需要你系統地精通一門語言,也不需要多麼高深的資料庫技術,高效的姿勢就是從實際的專案中去學習這些零散的知識點,你能保證每次學到的都是最需要的那部分。
當然唯一麻煩的是,在具體的問題中,如何找到具體需要的那部分學習資源、如何篩選和甄別,是很多初學者面臨的乙個大問題。
一文教你如何解讀Vintage
當我們在觀測資產最終損失和不同資產的風險差異時,經常會用到乙個指標,那就是vintage。這個指標的計算和展示與大多數指標有所不同,因為所需要的資料資訊並不單 於某乙個固定時間的切片資料,而是 於歷史多個時間節點的切片資料,所以它也攜帶了歷史資訊。vintage本身攜帶了這麼多資訊,我們該如何挖掘呢...
一文教你玩轉git
首先進入乙個目錄之後,使用這個命令是先初始化乙個git倉庫 git init 它會預設建立乙個名為master的分支 下面這個用於檢視是否有修改的檔案,如果有就會報紅 git status 下面這個用於檢視檔案修改的細節 git diff test.txt 下面這個是提交到暫存區 git add t...
一文教你看懂原型!!!
談到原型,我們都知道最重要的兩個屬性就是 proto 和prototype,那麼他們到底有什麼關係又到底是什麼呢,這一篇看完相信你就會有一些理解了。js中萬物皆物件,每個資料都會有乙個 proto 的屬性,這個屬性叫隱式原型。乙個物件 obj 的 隱式原型 proto 指向構造該物件 obj 的 建...