爬蟲入門總結


自己畢設做的是關于租房房價方面的分析,使用簡單的多元線性回歸模型來擬合租房的價格,需要采集一些租房的數據來做分析。我也就簡單的入門了爬蟲,陸續采集了自如、蘑菇租房、我愛我家的租房數據。本文對我學習爬蟲的過程做個總結。


一:爬蟲理解

個人對爬蟲的理解就是能夠按照自己的意愿和一定的規則,將互聯網上的數據抓取下來的工具。

我將爬蟲分為了兩類:簡單的和復雜的。

從規模上來看,簡單的爬蟲一般是由個人開發的,爬取的方式也比較簡單,一般屬于個人愛好啥的。復雜的爬蟲一般是由一個專門的團隊來開發和維護的,如谷歌百度等,用于大量的爬去互聯網上的數據。

從程序復雜度來看,簡單的爬蟲爬取易于爬取的數據,程序也不是很復雜,而復雜的爬蟲,需要考慮到各種異常,自動登錄,驗證碼識別,反爬等。

網上也有人總結了如下一張圖:

爬蟲

自己在圖中的定位是小批量爬取數據的編程愛好者。剛剛入門,先從小批量的數據爬起,要采集的租房數據每天也就3萬條左右。

要寫好一個爬蟲,還是需要一些基礎知識的,其中包括要了解網頁的基本構成、網絡請求、編程語言、數據庫、異常處理、熟悉常用的基本工具等,涉及到的方面還是比較廣。如果只是簡單的爬取一些數據,對每個方面可以淺嘗輒止,但是要是寫一個穩定、高性能、高可用的爬蟲,需要涉及的更深一些。下面總結一些入門爬蟲需要的基礎知識。

二:基礎知識

1、網頁的基本構成

網頁主要是由HTML,CSS,JavaScript組成。HTML作為網頁的骨架,CSS像人的衣服一樣,負責美化頁面,JavaScript為頁面加上行為。

如下圖所示:

網頁結構

要抓取的數據被一層又一層的被html的標簽包裹的,在抓取數據前,需要對網頁的結構進行仔細的分析,找到需要的數據在那個標簽下,標簽有什么特點。通過分析,就能從整個頁面中唯一定位到該數據的位置,這里面涉及到html結構,css選擇器(class,id選擇器)等知識。

我之前一直做PHP+web開發的,熟悉html,css,javascript等知識,對網頁的結構比較了解,基礎還是比較好的。

基礎的html,css知識可以到[w3cschool](http://www.w3school.com.cn/html/index.asp)上學習。

2、網絡請求

網絡請求主要包括URL的構成,網絡請求的方式和請求頭。網站的url都是有一定規則的,通過分析url可以唯一定位一個資源等,比如自如的每一個房源的鏈接格式為`http://www.ziroom.com/z/vr/60393569.html`,通過替換id,來定位不同的房源;翻頁的時候, 通過改變`http://www.ziroom.com/z/nl/z3.html?p=2`中p值來獲取不同的頁面。

爬蟲中常用的請求方式為get,post。請求網頁一般是get,一些api請求post。請求頭包含了公共部分,響應頭,請求頭,cookie等數據。

網絡請求

簡單的網站直接可以爬取數據,如蘑菇租房的房源信息接口。有些網站的api請求都是比較復雜的,需要偽造一些請求頭才能突破網站的防線,因此需要對網絡請求方面比較熟悉。偽造請求,就是接口要什么樣的數據,你就給它什么數據,這樣它才能給你返回你想要的數據。

3、Python

每一種編程語言,只要有網絡模塊,就可以用來寫爬蟲,只是每種語言寫的難易度等都不同。Python是做為爬蟲的主力語言,由于封裝的包比較多,使用起來特別方便。大部分爬蟲都是用Python寫的,因此需要掌握Python以下幾個方面的知識:

1、基礎的語法

2、數據結構

3、網絡請求

4、異常處理

5、文件、數據庫操作

6、常用爬蟲的包

我是今年2月中旬開始入門Python的,主要參考資料為 [Python 2.7教程 - 廖雪峰的官方網站](http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000)

4、數據存儲

采集下來的數據可以存放在文件中,也可以保存到數據庫中。文件在數據查詢,統計方面不方便,因此還是存放在數據庫中比較好。采集到的數據字段變化性比較大,不適合用mysql這種關系型數據庫,現在采用較多就是mongodb。mongodb比較靈活,可以隨意添加字段以及修改字段類型等。

使用數據庫就需要學習數據庫的安裝配置,id設計,增刪改查等操作,數據庫管理工具(如robomongo)使用,涉及內容比較多。

mongo存儲

三:常用基本工具

工欲善其事,必先利其器。Python有很多有關爬蟲方面的包,讓數據采集起來更加簡單方便。入門至少需要掌握以下幾種工具:

頁面結構分析:chrome開發者工具,用于查看頁面結構,網絡請求等

網絡請求:urllib,urllib2,requests,用于發起網絡請求,下載數據

解析:BeatifulSoup、xpath、re,用于解析頁面,分離有用數據,這三個包組合起來使用功能更加強大

數據庫:pymongo,用于操作mongodb數據庫;robmongo,mongodb可視化工具

掌握以上幾個工具或者包,就可以爬取大多數互聯網上的數據。

可以參考資料:

[xpath](http://www.w3school.com.cn/xpath/index.asp)

[Python爬蟲利器三之Xpath語法與lxml庫的用法 | 靜覓](http://cuiqingcai.com/2621.html)

[Beautiful Soup 4.2.0 文檔 — Beautiful Soup 4.2.0 documentation](https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html)

[正則表達式30分鐘入門教程](http://deerchao.net/tutorials/regex/regex.htm)

當然,這些基礎知識是在邊用邊學中逐漸總結記錄,然后鞏固的。下面簡要介紹了自如數據的采集工作。

四:自如數據爬取介紹

自如網站比較好爬取,下載頁面,然后提取出數據,然后入庫。但即使是一個很簡單的爬蟲,在具體實現程序之前,最好先畫個流程圖。先了解需要哪些數據,需要的數據應該從哪來來,如何去獲取它,頁面如何解析,如何存放等,梳理出整個流程。然后分析哪里存在不足,提前解決。

程序運行流程圖

有了整體的一個流程后,基本上就可以進行編碼實現。主要爬取的是房源的一些信息,包括區域、面積,價格,朝向等關鍵性的字段。從頁面結構分析數據的位置,然后綜合使用BeatifulSoup,re,xpath提取出數據。

最后采集到的數據做一次預處理,如數據格式化,異常值處理等工作,然后使用mongo進行存儲

爬取的數據

五: 爬蟲代碼是不斷改進的過程

在數據采集過程中,初學時由于缺乏經驗,會遇到很多的問題:網絡錯誤,數據錯誤,無故終止,數據采集不夠完整等等異常情況。代碼就會不斷的進行修改,修改到一定程度又會進行代碼的重構,如之前所有的代碼都寫在一個腳本中,需要抽出公用的一些函數如數據庫操作等,以及使用Python的類編寫代碼等等。因此爬蟲代碼是不斷改進,逐漸的修復各種問題,讓爬蟲運行的更加穩定的過程。當然,隨著經驗的增加,在寫代碼之前就會想到很多的異常的情況,寫出的代碼就會更具穩定性。

如果要讓爬蟲每天都運行,又需要大量的精力去維護代碼。我每天都要手動運行爬蟲采集數據,雖然可以使用crontab定時采集,但是在不能絕對保持穩定的情況下,還是手動的先運行一段時間為好。隨著爬的越來越多,維護起來也就越來越困難,又會逐漸進行代碼改進。改進的過程是痛苦的,卻能學到很多的有用的知識和寶貴的經驗。

六:讓數據發揮價值

爬取數據只是第一步,最重要的是對數據的分析,使抓取到的數據產生價值。

基于前面的數據采集工作,我使用簡單的多元線性回歸模型來對合租的數據進行擬合,試圖去發現租房價格與房子本身一些特征之間的關系。

擬合圖

然后結合了自己的老本行,使用vue+echarts+BaiduMap+tornado搞了個前端,將采集到的數據可視化處理,便于發現更多的規律。

前端展示

總結

通過對房屋數據的采集工作的梳理,從流程上,走通一遍整個爬蟲采集的各個環節,知道如何去寫一個爬蟲。從技術上,鞏固了編程語言,常用庫,數據庫等基礎知識,并且能夠綜合運用各項技術解決一系列的問題。從邏輯上,也完善了爬蟲各個環節上的異常處理,使爬蟲運行更加穩定。同時也充分結合了之前的技術棧,對數據進行可視化,挖掘出一些有用的價值。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容

  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,533評論 6 427
  • 爬蟲文章 in 簡書程序員專題: like:128-Python 爬取落網音樂 like:127-【圖文詳解】py...
    喜歡吃栗子閱讀 21,907評論 4 411
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,716評論 25 708
  • 爬蟲是一個比較容易上手的技術,也許花5分鐘看一篇文檔就能爬取單個網頁上的數據。但對于大規模爬蟲,完全就是另一回事,...
    真依然很拉風閱讀 9,691評論 5 114
  • 斜陽新骨城池畔,勾月昏鴉老橋頭 冬日下午的陽光冷冷的,沒有了夏日的焦灼與熾熱,透過窗簾與玻璃的細縫緩緩的流淌出來,...
    墨莫陌沫閱讀 191評論 3 2