一篇非常棒的安裝Python及爬蟲(chóng)入門(mén)博文!
一. 大數(shù)據(jù)及數(shù)據(jù)挖掘基礎(chǔ)(私信小編007即可獲取大量Python學(xué)習(xí)資料!)
***部分主要簡(jiǎn)單介紹三個(gè)問(wèn)題:
1、什么是大數(shù)據(jù)?
2、什么是數(shù)據(jù)挖掘?
3、大數(shù)據(jù)和數(shù)據(jù)挖掘的區(qū)別?
1、大數(shù)據(jù)(Big Data)
大數(shù)據(jù)(big data)指無(wú)法在一定時(shí)間范圍內(nèi)用常規(guī)軟件工具進(jìn)行捕捉、管理和處理的數(shù)據(jù)集合,是需要新處理模式才能具有更強(qiáng)的決策力、洞察發(fā)現(xiàn)力和流程優(yōu)化能力來(lái)適應(yīng)海量、高增長(zhǎng)率和多樣化的信息資產(chǎn)。
下圖是大數(shù)據(jù)經(jīng)典的4V特征。
IBM大數(shù)據(jù)庫(kù)框架及可視化技術(shù),大數(shù)據(jù)常用:Hadoop、Spark,現(xiàn)在更多的是實(shí)時(shí)數(shù)據(jù)分析,包括淘寶、京東、附近美食等。
下圖是大數(shù)據(jù)的一些應(yīng)用
說(shuō)到大數(shù)據(jù),就不得不提Hadoop,而說(shuō)到Hadoop,又不得不提Map-Reduce。
MapReduce是一個(gè)軟件框架由上千個(gè)商用機(jī)器組成的大集群上,并以一種可靠的,具有容錯(cuò)能力的方式并行地處理上TB級(jí)別的海量數(shù)據(jù)集。MapReduce的思想是“分而治之”。Mapper負(fù)責(zé)“分,Reducer負(fù)責(zé)對(duì)map階段的結(jié)果進(jìn)行匯總。
2、數(shù)據(jù)挖掘(Data Mining)
數(shù)據(jù)挖掘(Data Mining):數(shù)據(jù)庫(kù)、機(jī)器學(xué)習(xí)、人工智能、統(tǒng)計(jì)學(xué)的交叉學(xué)科。
數(shù)據(jù)挖掘需要發(fā)現(xiàn)有價(jià)值的知識(shí),同時(shí)最頂端都是具有智慧的去發(fā)現(xiàn)知識(shí)及有價(jià)值的信息。
因?yàn)樗饕轻槍?duì)網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行的大數(shù)據(jù)分析,需要Web Mining分類如下:
Web挖掘主要分為三類:Web日志挖掘、Web內(nèi)容挖掘、Web結(jié)構(gòu)挖掘。
3、機(jī)器學(xué)習(xí)
講到機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘相關(guān)的知識(shí),通常都會(huì)補(bǔ)充兩幅圖片。很形象的表示了計(jì)算機(jī)智能化與人類傳統(tǒng)知識(shí)的類比。
二. 安裝Python及基礎(chǔ)知識(shí)
1、安裝Python
在開(kāi)始使用Python編程之前,需要介紹Python的安裝過(guò)程。python解釋器在Linux中可以內(nèi)置使用安裝
步驟如下:
***步:打開(kāi)Web瀏覽器并訪問(wèn)官網(wǎng);
第二步:
在官網(wǎng)首頁(yè)點(diǎn)擊Download鏈接,進(jìn)入下載界面,選擇Python軟件的版本,作者選擇下載python 2.7.8,點(diǎn)擊“Download”鏈接。
Python下載地址:
第三步:選擇文件下載地址,并下載文件。
第四步:雙擊下載的“python-2.7.8.msi”軟件,并對(duì)軟件進(jìn)行安裝。
第五步:在Python安裝向?qū)е羞x擇默認(rèn)設(shè)置,點(diǎn)擊“Next”,選擇安裝路徑,這里設(shè)置為默認(rèn)的安裝路徑“C:Python27”,點(diǎn)擊“Next”按鈕,如圖所示。
注意1:建議將Python安裝在C盤(pán)下,通常路徑為C:Python27,不要存在中文路徑。
在Python安裝向?qū)е羞x擇默認(rèn)設(shè)置,點(diǎn)擊“Next”,選擇安裝路徑,這里設(shè)置為默認(rèn)的安裝路徑“C:Python27”,點(diǎn)擊“Next”按鈕。
安裝成功后,如下圖所示:
第六步:假設(shè)安裝一切正常,點(diǎn)擊“開(kāi)始”,選中“程序”,找到安裝成功的Python軟件,如圖所示:
選中上圖中第三個(gè)圖標(biāo),即點(diǎn)擊“Python (command line)命令行模式”,運(yùn)行程序輸入如下代碼:
- print 'hello world'
則python命令行模式的解釋器會(huì)打印輸出“hello world”字符串,如下圖所示。
選中圖中的***個(gè)圖片,點(diǎn)擊“IDLE (Python GUI)”,即運(yùn)行Python的集成開(kāi)發(fā)環(huán)境(Python Integrated Development Environment,IDLE),運(yùn)行結(jié)果如下圖。
注意2:建議大家使用IDLE寫(xiě)腳本,完整的代碼而不是通過(guò)命令行模式。
2、Python基礎(chǔ)知識(shí)
這里簡(jiǎn)單入門(mén)介紹,主要介紹下條件語(yǔ)句、循環(huán)語(yǔ)句、函數(shù)等基礎(chǔ)知識(shí)。
a、函數(shù)及運(yùn)行
這里舉個(gè)簡(jiǎn)單的例子。打開(kāi)IDLE工具->點(diǎn)擊欄"File"->New File新建文件->命名為test.py文件,在test文件里添加代碼如下:
保存文件。并在test.py文件里點(diǎn)擊Run->Run Module,輸出結(jié)果如下圖所示。
b、條件語(yǔ)句
包括單分支、雙分支和多分支語(yǔ)句,if-elif-else。
(1).單分支語(yǔ)句
它的基本格式是:
- if condition:
- statement
- statement
需要注意的是Ptthon中if條件語(yǔ)句條件無(wú)需圓括號(hào)(),條件后面需要添加冒號(hào),它沒(méi)有花括號(hào){}而是使用TAB實(shí)現(xiàn)區(qū)分。其中condition條件判斷通常有布爾表達(dá)式(True|False 0-假|(zhì)1-真 非0即真)、關(guān)系表達(dá)式(>= <= == !=)和邏輯運(yùn)算表達(dá)式(and or not)。
(2).雙分支語(yǔ)句
它的基本格式是:
- if condition:
- statement
- statement
- else:
- statement
- statement
(3).多分支語(yǔ)句
if多分支由if-elif-else組成,其中elif相當(dāng)于else if,同時(shí)它可以使用多個(gè)if的嵌套。具體代碼如下所示:
c、while循環(huán)語(yǔ)句
while循環(huán)語(yǔ)句的基本格式如下:
- while condition:
- statement
- statement
- else:
- statement
- statement
其中判斷條件語(yǔ)句condition可以為布爾表達(dá)式、關(guān)系表達(dá)式和邏輯表達(dá)式,else可以省略(此處列出為與C語(yǔ)言等區(qū)別)。舉個(gè)例子:
d、for循環(huán)
該循環(huán)語(yǔ)句的基礎(chǔ)格式為:
- for target in sequences:
- statements
target表示變量名,sequences表示序列,常見(jiàn)類型有l(wèi)ist(列表)、tuple(元組)、strings(字符串)和files(文件)。
Python的for沒(méi)有體現(xiàn)出循環(huán)的次數(shù),不像C語(yǔ)言的for(i=0;i<10;i++)中i循環(huán)計(jì)數(shù),Python的for指每次從序列sequences里面的數(shù)據(jù)項(xiàng)取值放到target里,取完即結(jié)束,取多少次循環(huán)多少次。其中in為成員資格運(yùn)算符,檢查一個(gè)值是否在序列中。同樣可以使用break和continue跳出循環(huán)。
下面是文件循環(huán)遍歷的過(guò)程:
e、課堂講解代碼
僅供大家參考:
輸出結(jié)果如下圖所示:
三. 安裝PIP及第三方包
接下來(lái)需要詳解介紹爬蟲(chóng)相關(guān)的知識(shí)了,這里主要涉及到下面幾個(gè)知識(shí):
爬蟲(chóng)主要使用Python(字符串|urllib)+Selenium+PhantomJS+BeautifulSoup。
在介紹爬蟲(chóng)及Urllib下載網(wǎng)頁(yè)或圖片之前,先教大家如何使用pip安裝第三方的庫(kù)。
PIP
在介紹介紹它們之前,需要安裝PIP軟件。“作為Python愛(ài)好者,如果不知道easy_install或者pip中的任何一個(gè)的話,那么......”。
easy_insall的作用和perl中的cpan,ruby中的gem類似,都提供了在線一鍵安裝模塊的傻瓜方便方式,而pip是easy_install的改進(jìn)版,提供更好的提示信息,刪除package等功能。老版本的python中只有easy_install,沒(méi)有pip。常見(jiàn)的具體用法如下:
***步:下載PIP軟件
可以在官網(wǎng)http://pypi.python.org/pypi/pip#downloads下載,同時(shí)cd切換到PIP目錄,在通過(guò)python setup.py install安裝。而我采用的是下載pip-Win_1.7.exe進(jìn)行安裝
第二步:安裝PIP軟件
當(dāng)提示"pip and virtualenv installed"表示安裝成功,那怎么測(cè)試PIP安裝成功呢?
第三步:配置環(huán)境變量
此時(shí)在cmd中輸入pip指令會(huì)提示錯(cuò)誤“不是內(nèi)部或外部命令”。
注意:兩種解決方法,一種是通過(guò)cd ..去到Srcipts環(huán)境進(jìn)行安裝,pip install...
方法二:另一種配置Path路徑。
需要添加path環(huán)境變量。PIP安裝完成后,會(huì)在Python安裝目錄下添加pythonScripts目錄,即在python安裝目錄的Scripts目錄下,將此目錄加入環(huán)境變量中即可!過(guò)程如下:
第四步:使用PIP命令
下面在CMD中使用PIP命令,“pip list outdate”列舉Python安裝庫(kù)的版本信息。
注意:安裝成功后,會(huì)在Python環(huán)境中增加Scripts文件夾,包括easy_install和pip。
PIP安裝過(guò)程中可能出現(xiàn)各種問(wèn)題,一種解決方法是去到python路徑,通過(guò)python set_up.py install安裝;另一種是配置Path環(huán)境比例。
課堂重點(diǎn)知識(shí):
***節(jié)課主要想讓大家體會(huì)下Python網(wǎng)絡(luò)爬蟲(chóng)的過(guò)程及示例。需要安裝的第三方庫(kù)主要包括三個(gè):
- pip install httplib2
- pip install urllib
- pip install selenium
在安裝過(guò)程中,如果pip install urllib報(bào)錯(cuò),是因?yàn)閔ttplib2包含了,可直接用。
注意:如果pip安裝報(bào)錯(cuò)ascii編碼問(wèn)題,需要把計(jì)算機(jī)名稱從中文修改為英文名。
四. Urllib下載網(wǎng)頁(yè)及圖片
在使用pip install urllib或pip install urllib2后,下面這段代碼是下載網(wǎng)頁(yè)。
首先我們調(diào)用的是urllib2庫(kù)里面的urlopen方法,傳入一個(gè)URL,這個(gè)網(wǎng)址是百度首頁(yè),協(xié)議是HTTP協(xié)議,當(dāng)然你也可以把HTTP換做FTP、FILE、HTTPS 等等,只是代表了一種訪問(wèn)控制協(xié)議,urlopen一般接受三個(gè)參數(shù),它的參數(shù)如下:
***個(gè)參數(shù)url即為URL,第二個(gè)參數(shù)data是訪問(wèn)URL時(shí)要傳送的數(shù)據(jù),第三個(gè)timeout是設(shè)置超時(shí)時(shí)間。
第二三個(gè)參數(shù)是可以不傳送的,data默認(rèn)為空None,timeout默認(rèn)為 socket._GLOBAL_DEFAULT_TIMEOUT。
***個(gè)參數(shù)URL是必須要傳送的,在這個(gè)例子里面我們傳送了百度的URL,執(zhí)行urlopen方法之后,返回一個(gè)response對(duì)象,返回信息便保存在這里面。
response對(duì)象有一個(gè)read方法,可以返回獲取到的網(wǎng)頁(yè)內(nèi)容。
獲取的網(wǎng)頁(yè)本地保存為"baidu.html",通過(guò)瀏覽器打開(kāi)如下圖所示:
然后是需要下載圖片,這里需要學(xué)會(huì)找到圖片的URL,如下圖百度的LOGO,可以通過(guò)瀏覽器右鍵"審查元素"或"檢查"來(lái)進(jìn)行定位。
定位URL后,再通過(guò)函數(shù)urlretrieve()進(jìn)行下載。
重點(diǎn)知識(shí):
urllib.urlopen(url[, data[, proxies]]) :創(chuàng)建一個(gè)表示遠(yuǎn)程url的類文件對(duì)象,然后像本地文件一樣操作這個(gè)類文件對(duì)象來(lái)獲取遠(yuǎn)程數(shù)據(jù)。
urlretrieve方法直接將遠(yuǎn)程數(shù)據(jù)下載到本地。
如果需要顯示進(jìn)度條,則使用下面這段代碼:
五. HTML網(wǎng)頁(yè)基礎(chǔ)知識(shí)及審查元素
HTML DOM是HTML Document Object Model(文檔對(duì)象模型)的縮寫(xiě),HTML DOM則是專門(mén)適用于HTML/XHTML的文檔對(duì)象模型。熟悉軟件開(kāi)發(fā)的人員可以將HTML DOM理解為網(wǎng)頁(yè)的API。它將網(wǎng)頁(yè)中的各個(gè)元素都看作一個(gè)個(gè)對(duì)象,從而使網(wǎng)頁(yè)中的元素也可以被計(jì)算機(jī)語(yǔ)言獲取或者編輯。
DOM是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)或信息片斷的集合。這個(gè)層次結(jié)構(gòu)允許開(kāi)發(fā)人員在樹(shù)中導(dǎo)航尋找特定信息。分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造層次結(jié)構(gòu),然后才能做任何工作。由于它是基于信息層次的,因而 DOM 被認(rèn)為是基于樹(shù)或基于對(duì)象的。
HTML DOM 定義了訪問(wèn)和操作HTML文檔的標(biāo)準(zhǔn)方法。 HTML DOM 把 HTML 文檔呈現(xiàn)為帶有元素、屬性和文本的樹(shù)結(jié)構(gòu)(節(jié)點(diǎn)樹(shù))。它們都是一個(gè)節(jié)點(diǎn)(Node),就像公司的組織結(jié)構(gòu)圖一樣。 我們現(xiàn)在從另一個(gè)角度來(lái)審視源代碼,first.html的源碼如下:
這個(gè)例子的***個(gè)元素就是<html>元素,在這個(gè)元素的起始標(biāo)簽和終止標(biāo)簽之間,又有幾個(gè)標(biāo)簽分別起始和閉合,包括<head>、<title>和<body>。<head>和<body>標(biāo)簽是直接被<html>元素包含的,而<title>標(biāo)簽則包含在<head>標(biāo)簽內(nèi)。要描述一個(gè)HTML網(wǎng)頁(yè)的這種多層結(jié)構(gòu),用樹(shù)來(lái)進(jìn)行類比是***的方式。樹(shù)形結(jié)構(gòu)如下圖所示:
重點(diǎn):
在網(wǎng)絡(luò)爬蟲(chóng)中,通常需要結(jié)合瀏覽器來(lái)定位元素,瀏覽器右鍵通常包括兩個(gè)重要的功能:查看源代碼和審查或檢查元素。
通過(guò)審查元素,可以定位到需要爬取圖片或網(wǎng)頁(yè)的HTML源文件,通常是table或div的布局,這些HTML標(biāo)簽通常是成對(duì)出現(xiàn)的,如<html></html>、<div></div>等;同時(shí)會(huì)包括一些屬性id、name、class來(lái)指定該標(biāo)簽。如:
- <div id="content" name="n1" class="cc">....</div>
六. 安裝Selenium及網(wǎng)頁(yè)簡(jiǎn)單爬取
Selenium用于Web應(yīng)用程序測(cè)試的工具,模擬瀏覽器用戶操作,通過(guò)Locating Elements 定位元素。安裝過(guò)程如下圖所示,通過(guò)pip install selenium安裝。
注意:需要cd去到Scripts目錄進(jìn)行安裝。
selenium結(jié)合瀏覽器定位的基本函數(shù)包括:
***個(gè)基于Selenium爬蟲(chóng)的代碼,通過(guò)調(diào)用Firefox瀏覽器:
輸出如下圖所示: