溫馨提示:閱讀Cosmo的問題文章碰到括號請先跳過,讀完整句話再回頭看括號裡的內容
Cosmo認為要學好機器學習、數據挖掘的話四方面很重要:編程、理論知識、數學基礎、計算機科學基礎
所以Cosmo不會一直講機器學習的理論知識,其他方面也會一起講,數據科學領域最受歡迎的程式語言應該數Python和R語言了
不要問我哪個比較好,也希望大家不要去投身到程式語言聖戰中爭論哪個好一點,哪個更好對現在的我們來說並不重要,我們只要把兩個都學了,哪個更適合你自然心知肚明,由於Cosmo對python的個人喜好,所以我們這裡講python~
這篇文章會按:安裝Python->利用python抓取網頁內容來講(爬網頁的意思就是利用「網絡爬蟲」,把你在瀏覽器能看到的東西,自動、批量地下載到電腦裡)
網絡爬蟲可以這樣形象地理解:把網際網路想像成一張很大的網,網上的每一個節點都代表一個網頁,如果我開了家叫Goodle的公司(聽這山寨名字就知道幹的事情和Google差不多),那麼我就需要把網際網路上所有網頁裝進我口袋,這樣別人向我查詢才可以把網頁找給他呀。但是我發現網頁太多,收集起來好累……於是我做了一隻叫「網絡爬蟲」的蜘蛛,把它丟在網際網路上,告訴它,見到新的網站你就吃進肚子裡,重複的網站就不要吃了,吃完一個網站就再吃跟這個網站有連結的新網站……直到你把網際網路所有不重複的網站吃掉就跑回來吐給我哦
我們這裡不需要像Goodle公司那樣爬取很多網頁,先學爬一個網頁裡的部分內容就好了
我們說好了是說人話的知識嘛,講那些會感覺枯燥呀,Cosmo假設你知道一點點編程知識了(其實不知道也沒有很大障礙,想補基礎可以聽聽這課https://www.coursera.org/learn/hipython 那個老師也挺搞笑的)。編程最重要是覺得好玩,有了興趣你就會自己去學,比我教的快多了。
我會詳細地用人話講解每一個部分代表什麼意思的啦,快速學習需要Learning by doing嘛
Life is short,I use python 來來開始講python大法
首先我們不去官網下python,因為那個版本太純淨了,什麼不都不帶,對新手不太友好,這裡Cosmo推薦安裝Anaconda大禮包
只有最基礎的python我們是不能做很多事情的,python之所以那麼強大,是因為他有很多的模塊(Module),你可以理解為裝備,這些裝備是玩python的大神打造的,如果沒有他們,你是這樣的
安裝了這些包\模塊\庫之後,你就長這樣了
而Anaconda之所以被我叫做大禮包是因為數據科學需要的模塊它基本都自帶幫你裝好了,很多新手剛開始裝個模塊都被坑得痛不欲生
去這個網址
https://www.continuum.io/downloads#_windows
下載python2.7,這裡不介紹python2.7和3.5有什麼區別,反正我們用2.7的,安裝過程沒什麼技術含量只是等的比較久就跳過了
成功安裝後您將獲得精美禮品Jupter Notebook一份,Ipython一份,集成開發環境Spyder一份(不知道是什麼鬼不要緊,反正在你的開始菜單->所有程序->Anaconda裡獲得了很多神器)
至此python已經安裝完成啦~~感謝大家的的閱讀
如果你覺得Cosmo這篇文章有趣或者能讓你學到東西,我便十分的高興,希望你能動動小手把文章或公眾號介紹給你好朋友,這就是對我最大的支持啦!支持就是動力,就會繼續寫下去(好順口哈哈),如果你也想「講人話」給大家分享你的知識,非常歡迎聯繫我!
差點忘了……
今天我們要爬取的網頁是
http://www.ishadowsocks.com/
為什麼要爬這個網站呢?還記得Cosmo布置的小作業(去找找怎麼fan qiang)嗎?
心軟善良純真熱心的Cosmo還是擔心有些同學沒找到,看coursera之類的響應速度慢成狗,因此而放棄學習就不太好了,所以在下一次推送中會教大家上網的正確姿勢,而我們今天爬取的這個網站正是為下一次做準備的(Cosmo在下一盤很大的棋)
打開這個網站拉到最下面我們會看到
看到免費兩個字兩眼放光有沒有~看到密碼就像看到錢是不是,我們就爬取這些看起來很值錢的信息吧!
Cosmo建議大家使用Chrome瀏覽器(Google出品值得信賴,它的拓展程序就像剛剛說的可以穿裝備那麼強大),這時候點擊右鍵->查看網頁原始碼(其他瀏覽器也可以哦)
彈出一堆亂七八糟的東西看得眼都花了吧~所以我們不看,直接按鍵盤ctrl+F查找,輸入密碼作為關鍵字就直接跳轉到免費信息那裡了~
我們發現他們被一堆奇奇怪怪的代碼包圍了,不需要理解這些代碼的意思,那是編寫網頁用的代碼,我們現在關心的只是如何把這些有用的東西自動下載到我電腦裡
你說的很有道理,不過這裡只是為了說明爬蟲最簡單的流程啦,如果要爬取的東西很多,分布在很多網頁,複製起來就會哭的嘛,所以我們還是用python寫網頁爬蟲的形式來下載
首先按ctrl+R,然後輸入cmd,出來一個黑框框,在裡面輸入ipython或者python之後回車(或者你直接打開我們剛剛獲得的大禮包裡的Ipython)
如果你的Anaconda安裝沒問題的話會是這樣的情景
接下來輸入import urllib2,這是引入(import)爬取網頁用的一個庫,比如我們要用python實現打開網頁,讀取網頁之類的操作,都需要用到裡面的函數
再輸入import re,re是regular expression的縮寫,中文是正則表達式,我們還是不要管中文名字好了,從「正則」這兩個字來理解我至今仍然無法獲得一種直觀認識。但是regular我們懂呀,就是經常的、規則的嘛~
所以regular expression大概就是通配符的意思(喜歡折騰電腦的同學應該知道)
通配符是一種特殊語句,主要有星號(*)和問號(?),用來模糊搜索文件。當查找文件夾時,可以使用它來代替一個或多個真正字符
比如我們突然忘記了《會說人話的知識》這個公眾號,只記得那個猥瑣搞笑的公眾號大概叫《會XXX的知識》,死都記不起來中間三個字是啥,那麼我們搜索的時候希望可以問電腦「那個不知道會幹嘛的知識那個公眾號麻煩幫我找一下」,有需求就會有人去開發,這就是通配符了,星號*可以代表所有不知道的東東,我們搜索就可以是《會*的知識》,醬紫就能找出我的公眾號啦
對正則表達式有個直觀了解後我們就可以開始做啦!
首先我們需要在python裡打開剛剛那個網址,輸入
web=urllib2.urlopen('http://www.ishadowsocks.com/')
urllib2就是我們說的爬網站用的庫啦,urllib2中的url我們可以理解為網址的意思,lib是library的意思,就是庫,2代表這個庫很2(開玩笑)
urlopen自然就是打開網址的意思啦~注意網址兩邊要用引號包住,單引號雙引號都可以,告訴python這是一個網址,而不是程序裡的一些變量
剛剛只是打開了一個網址而已,我們還看不到網站裡的東西
所以繼續輸入
neirong=web.read()
read()是用來讀取網頁的函數,這段代碼意思是讀取我們幫幫打開的web,把內容放在neirong裡
現在我們來看看剛剛讀取的內容是啥,輸入neirong回車就可以查看
這些都是什麼鬼……這哪裡是內容,根本就是鳥語好嗎?
我們需要讓它講人話!!
輸入jiangrenhua=neirong.decode('UTF-8')
(讀代碼一般應該從右向左讀) neirong.decode意思是把剛剛內容裡的那些鳥語解碼,decode是解碼的意思,解碼我們可以理解為翻譯= =,後面的UTF-8就是這種鳥語的名字了,我們根本看不懂的那些話其實是名為UTF-8的這種語言(編碼)來的
翻譯成什麼呢?直接翻譯成中文?很遺憾不可以~如果把我們看不懂的那些東西叫做鳥不拉屎語,而我們看得懂的是中文,那麼python需要把鳥不拉屎語翻譯成一種通用語言英語(Unicode編碼),在輸出的時候再翻譯成中文,即翻譯兩次哦
也就是說我們這一步把鳥不拉屎語UTF-8翻譯成英文Unicode,存放在jiangrenhua(講人話)這個變量裡
這時候我們試試能不能看到網頁的內容了
輸入
print jiangrenhua
好開心~終於出現中文了,在這一步裡print是列印的意思,在列印jiangrenhua裡的內容的時候,python自動會把英文(Unicode)翻譯成中文(這取決於你電腦的中文編碼),所以我們不需要專門去把英文轉換成中文
但是這麼鬼死多東西,我們只想要剛剛那些免費的信息,用眼睛好難找啊……這時候就可以搬出我們的大殺器正則表達式(regular expression)啦~
回到網頁的原始碼我們可以看到,我們需要的信息被很多<h4>包圍著
所以我們只要用正則表達式把<h4>之間的東西搜索出來就好啦
RegularExpression='<h4>(.*)<\/h4>'
我們先把正則表達式寫好,等號右邊的意思是我們待會兒要匹配的內容是<h4>與</h4>之間的任意內容,為什麼任意內容用(.*)表示呢?括號只是告訴python這裡面是我想要的東西,而點.在python的正則表達式裡代表除換行符外任意一個字符(不懂換行符不要緊,這不是重點忽略它),星號*代表不只一個字符,因為前面那個點. 只能匹配一個字符,而我們想要的內容不止一個字符。
然後開始搜索,把搜索結果放在Valuable這個變量裡,因為我們覺得這些信息很有價值嘿嘿
Valuable=re.findall(RegularExpression,jiangrenhua)
以上代碼用中文來打:有價值的=正則表達式.找到所有(正則表達式,講人話),意思是在jiangrenhua那一大堆東西裡找出所有被<h4>和</h4>包住的東西,把這些東西放一個叫做有價值的列表裡
之後看看有價值的這個列表裡都放了什麼東西
len(Valuable)#看看Valuable裡面有多少個元素,發現有45個
for i in range(45):
print Valuable[i]
寫了一個循環把Valuable的45個元素全部輸出來看看
我們發現只有前18行使我們想要的,所以我們還是輸出前18行就好了
for i in range(18):
print Valuable[i]
但是我們發現很多奇奇怪怪的英文,我們並不想要這些,那麼可以利用re這個庫裡的sub函數去掉沒用的東西(其實到這一步我們目的已經達到了,只是覺得長得太醜)
先創建一個列表,等一下用來存放那些免費的信息的,輸入
Information=[]
再輸入(看圖片)
valuable=re.sub('<.*?>','',Valuable[i]) 這段代碼是把Valuable裡第i個元素中,所有被<>這兩個尖括號的包住的東西(.*?代表這裡可以有任意內容,也可能沒有內容),替換成' ',也就是什麼都沒有的空白,其實就是刪掉尖括號裡的東西咯(包括尖括號)
Information.append(valuable) 這段代碼的意思是把去掉沒用信息之後的valuable加入Information裡,append是擴展的意思,就是把valuable擴展進來。
最後輸出Information列表,我們的目的就達到啦,成功爬取了那些免費信息
上網的正確姿勢還是明天再說吧,朕肚子餓了,如果你希望使用谷歌學術可以先用
www.meiguge.com哦~
最後附上全部代碼(其中一些變量名不太一樣)
# -*- coding: utf-8 -*-
import re
import urllib2
url='http://www.ishadowsocks.com/'
WangYe=urllib2.urlopen(url).read().decode('UTF-8')
RegularExpression='<h4>(.*?)<\/h4>'
Valuable=re.findall(RegularExpression,WangYe)
Information=[]
for i in range(18):
valuable=re.sub('<.*?>','',Valuable[i])
Information.append(valuable)
print Information[i]
如果你覺得Cosmo這篇文章有趣或者能讓你學到東西,我便十分的高興,希望你能動動小手把文章或公眾號介紹給你好朋友,這就是對我最大的支持啦!支持就是動力,就會繼續寫下去(好順口哈哈)
最後:以上內容的圖片部分來自網絡,若無意侵犯了您的權益,請立即回復公眾號與我聯繫,我會馬上進行處理!為了使文章通俗有趣,部分內容可能不夠嚴謹,還請海涵!本人才疏學淺,若有錯漏之處,歡迎批評指正。本文原創,轉載請註明出處