最近在研究文本挖掘相關的內容,所謂巧婦難為無米之炊,要想進行文本分析,首先得到有文本吧。獲取文本的方式有很多,比如從網上下載現成的文本文檔,或者通過第三方提供的API進行獲取數據。但是有的時候我們想要的數據并不能直接獲取,因為并不提供直接的下載渠道或者API供我們獲取數據。那么這個時候該怎么辦呢?有一種比較好的辦法是通過網絡爬蟲,即編寫計算機程序偽裝成用戶去獲得想要的數據。利用計算機的高效,我們可以輕松快速地獲取數據。
那么該如何寫一個爬蟲呢?有很多種語言都可以寫爬蟲,比如Java,php,python 等,我個人比較喜歡使用python。因為python不僅有著內置的功能強大的網絡庫,還有諸多優秀的第三方庫,別人直接造好了輪子,我們直接拿過來用就可以了,這為寫爬蟲帶來了極大的方便。不夸張地說,使用不到10行python代碼其實就可以寫一個小小的爬蟲,而使用其他的語言可以要多寫很多代碼,簡潔易懂正是python的巨大的優勢。
好了廢話不多說,進入今天的正題。最近幾年網易云音樂火了起來,我自己就是網易云音樂的用戶,用了幾年了。以前用的是QQ音樂和酷狗,通過我自己的親身經歷來看,我覺得網易云音樂最優特色的就是其精準的歌曲推薦和獨具特色的用戶評論(鄭重聲明?。。∵@不是軟文,非廣告?。?!僅代表個人觀點,非喜勿噴?。?。經常一首歌曲下面會有一些被點贊眾多的神評論。加上前些日子網易云音樂將精選用戶評論搬上了地鐵,網易云音樂的評論又火了一把。所以我想對網易云的評論進行分析,發現其中的規律,特別是分析一些熱評具有什么共同的特點。帶著這個目的,我開始了對網易云評論的抓取工作。
python內置了兩個網絡庫urllib和urllib2,但是這兩個庫使用起來不是特別方便,所以在這里我們使用一個廣受好評的第三方庫requests。使用requests只用很少的幾行代碼就可以實現設置代理,模擬登陸等比較復雜的爬蟲工作。如果已經安裝pip的話,直接使用pip install requests 即可安裝。中文文檔地址在此http://docs.python-requests.org/zh_CN/latest/user/quickstart.html,大家有什么問題可以自行參考官方文檔,上面會有非常詳細的介紹。至于urllib和urllib2這兩個庫也是比較有用的,以后如果有機會我會再給大家介紹一下。
在正式開始介紹爬蟲之前,首先來說一下爬蟲的基本工作原理,我們知道我們打開瀏覽器訪問某個網址本質上是向服務器發送了一定的請求,服務器在收到我們的請求之后,會根據我們的請求返回數據,然后通過瀏覽器將這些數據解析好,呈現在我們的面前。如果我們使用代碼的話,就要跳過瀏覽器的這個步驟,直接向服務器發送一定的數據,然后再取回服務器返回的數據,提取出我們想要的信息。但是問題是,有的時候服務器需要對我們發送的請求進行校驗,如果它認為我們的請求是非法的,就會不返回數據,或者返回錯誤的數據。所以為了避免發生這種情況,我們有的時候需要把程序偽裝成一個正常的用戶,以便順利得到服務器的回應。如何偽裝呢?這就要看用戶通過瀏覽器訪問一個網頁與我們通過程序訪問一個網頁之間的區別。通常來說,我們通過瀏覽器訪問一個網頁,除了發送訪問的url之外,還會給服務發送額外的信息,比如headers(頭部信息)等,這就相當于是請求的身份證明,服務器看到了這些數據,就會知道我們是通過正常的瀏覽器訪問的,就會乖乖地返回數據給我們了。所以我們程序就得像瀏覽器一樣,在發送請求的時候,帶上這些標志著我們身份的信息,這樣就能順利拿到數據。有的時候,我們必須在登錄狀態下才能得到一些數據,所以我們必須要模擬登錄。本質上來說,通過瀏覽器登錄就是post一些表單信息給服務器(包括用戶名,密碼等信息),服務器校驗之后我們就可以順利登錄了,利用程序也是一樣,瀏覽器post什么數據,我們原樣發送就可以了。關于模擬登錄,我后面會專門介紹一下。當然事情有的時候也不會這么順利,因為有些網站設置了反爬措施,比如如果訪問過快,有時候會被封ip(典型的比如豆瓣)。這個時候我們還得要設置代理服務器,即變更我們的ip地址,如果一個ip被封了,就換另外一個ip,具體怎么做,這些話題以后慢慢再說。
新聞熱點
疑難解答