【Python數據挖掘課程】一.安裝Python及爬蟲入門介紹
來源:程序員人生 發布時間:2016-12-14 09:03:05 閱讀次數:5302次
最近由于需要給大數據金融學院的學生講授《Python數據發掘及大數據分析》的課程,所以在這里,我將結合自己的上課內容,詳細講授每一個步驟。作為助教,我更希望這門課程以實戰為主,同時按小組劃分學生,每一個小組最后都提交1個基于Python的數據發掘及大數據分析相干的成果。但是前面這節課沒有在機房上,所以我在CSDN也將開設1個專欄,用于對該課程的補充。
希望該文章對你有所幫助,特別是對大數據或數據發掘的初學者,很開心和夏博、小民1起分享該課程,上課的感覺真的挺不錯的,挺享受的。我也將認真對待每個我的學生,真的好想把自己的所學的所有知識都給予你們。同時由于學生來自不同的學院,有的乃至沒有接觸過編程,所以這門課程也將采取從零單排的情勢講述。
這門課程圍繞下圖所示的內容進行展開及實戰。
課程資源:
1. 大數據及數據發掘基礎
第1部份主要簡單介紹3個問題(覺得無聊的直接調至第2部份):
1、甚么是大數據?
2、甚么是數據發掘?
3、大數據和數據發掘的區分?
由于前面幾節課老師普及了大數據等1些基礎知識,這里我并沒有詳細介紹,只是給幾張圖片,讓大家簡單了解下大數據和數據發掘相干的基礎概念,我分享更多的是實戰和編程。
<1>.大數據(Big Data)
大數據(big data)指沒法在1定時間范圍內用常規軟件工具進行捕捉、管理和處理的數據集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力來適應海量、高增長率和多樣化的信息資產。
下圖是大數據經典的4V特點。
IBM大數據庫框架及可視化技術,大數據經常使用:Hadoop、Spark,現在更多的是實時數據分析,包括淘寶、京東、附近美食等。
下圖是大數據的1些利用。

說到大數據,就不能不提Hadoop,而說到Hadoop,又不能不提Map-Reduce。
MapReduce是1個軟件框架由上千個商用機器組成的大集群上,并以1種可靠的,具有容錯能力的方式并行地處理上TB級別的海量數據集。MapReduce的思想是“分而治之”。Mapper負責“分,Reducer負責對map階段的結果進行匯總。
<2>.數據發掘(Data Mining)
數據發掘(Data Mining):數據庫、機器學習、人工智能、統計學的交叉學科。
數據發掘需要發現有價值的知識,同時最頂端都是具有智慧的去發現知識及有價值的信息。
由于這門課程主要是針對網頁數據進行的大數據分析,需要Web Mining分類以下:
Web發掘主要分為3類:Web日志發掘、Web內容發掘、Web結構發掘。
<3>.機器學習
講到機器學習和數據發掘相干的知識,我通常都會補充兩幅圖片,感覺真的很棒。很想象的表示了計算機靈能化與人類傳統知識的類比。
推薦文章:機器學習:“1文讀懂機器學習,大數據/自然語言處理/算法全有了”
2. 安裝Python及基礎知識
<1>.安裝Python
在開始使用Python編程之前,需要介紹Python的安裝進程。python解釋器在Linux中可之內置使用安裝,windows中需要去http://www.python.org官網downloads頁面下載。具體步驟以下:
第1步:打開Web閱讀器并訪問http://www.python.org官網;
第2步:在官網首頁點擊Download鏈接,進入下載界面,選擇Python軟件的版本,作者選擇下載python 2.7.8,點擊“Download”鏈接。
Python下載地址:
第3步:選擇文件下載地址,并下載文件。
第4步:雙擊下載的“python⑵.7.8.msi”軟件,并對軟件進行安裝。
第5步:在Python安裝向導當選擇默許設置,點擊“Next”,選擇安裝路徑,這里設置為默許的安裝路徑“C:\Python27”,點擊“Next”按鈕,如圖所示。
注意1:建議將Python安裝在C盤下,通常路徑為C:\Python27,不要存在中文路徑。
在Python安裝向導當選擇默許設置,點擊“Next”,選擇安裝路徑,這里設置為默許的安裝路徑“C:\Python27”,點擊“Next”按鈕。
安裝成功后,以下圖所示:
第6步:假定安裝1切正常,點擊“開始”,選中“程序”,找到安裝成功的Python軟件,如圖所示:
選中上圖中第3個圖標,即點擊“Python (command line)命令行模式”,運行程序輸入以下代碼:
print 'hello world'
則python命令行模式的解釋器會打印輸出“hello world”字符串,以下圖所示。
選中圖中的第1個圖片,點擊“IDLE (Python GUI)”,即運行Python的集成開發環境(Python Integrated Development Environment,IDLE),運行結果以下圖。
注意2:建議大家使用IDLE寫腳本,完全的代碼而不是通過命令行模式。
<2>.Python基礎知識
這里簡單入門介紹,主要介紹下條件語句、循環語句、函數等基礎知識。
1、函數及運行
這里舉個簡單的例子。打開IDLE工具->點擊欄"File"->New File新建文件->命名為test.py文件,在test文件里添加代碼以下:
def fun1():
print 'Hello world'
print 'by eastmount csdn'
print 'output'
fun1()
def fun2(val1,val2):
print val1
print val2
fun2(8,15)
保存文件。并在test.py文件里點擊Run->Run Module,輸出結果以下圖所示。
2、條件語句
包括單分支、雙分支和多分支語句,if-elif-else。
(1).單分支語句
它的基本格式是:
if condition:
statement
statement
需要注意的是Ptthon中if條件語句條件無需圓括號(),條件后面需要添加冒號,它沒有花括號{}而是使用TAB實現辨別。其中condition條件判斷通常有布爾表達式(True|False 0-假|1-真 非0即真)、關系表達式(>=
<= == !=)和邏輯運算表達式(and or not)。
(2).雙分支語句
它的基本格式是:
if condition:
statement
statement
else:
statement
statement
(3).多分支語句
if多分支由if-elif-else組成,其中elif相當于else if,同時它可使用多個if的嵌套。具體代碼以下所示:
#雙分支if-else
count = input("please input:")
print 'count=',count
if count>80:
print 'lager than 80'
else:
print 'lower than 80'
print 'End if-else'
#多分支if-elif-else
number = input("please input:")
print 'number=',number
if number>=90:
print 'A'
elif number>=80:
print 'B'
elif number>=70:
print 'C'
elif number>=60:
print 'D'
else:
print 'No pass'
print 'End if-elif-else'
#條件判斷
sex = raw_input("plz input your sex:")
if sex=='male' or sex=='m' or sex=='man':
print 'Man'
else:
print 'Woman'
3、while循環語句
while循環語句的基本格式以下:
while condition:
statement
statement
else:
statement
statement
其中判斷條件語句condition可以為布爾表達式、關系表達式和邏輯表達式,else可以省略(此處列出為與C語言等區分)。舉個例子:
#循環while計數1+2+..+100
i = 1
s = 0
while i <= 100:
s = s+i
i = i+1
else:
print 'exit while'
print 'sum = ',s
'''
輸出結果為:exit while
sum = 5050
'''
4、for循環
該循環語句的基礎格式為:
for target in sequences:
statements
target表示變量名,sequences表示序列,常見類型有list(列表)、tuple(元組)、strings(字符串)和files(文件).
Python的for沒有體現出循環的次數,不像C語言的for(i=0;i<10;i++)中i循環計數,Python的for指每次從序列sequences里面的數據項取值放到target里,取完即結束,取多少次循環多少次。其中in為成員資格運算符,檢查1個值是不是在序列中。一樣可使用break和continue跳出循環。
下面是文件循環遍歷的進程:
#文件循環遍歷3種對照
for n in open('for.py','r').read():
print n,
print 'End'
for n in open('for.py','r').readlines():
print n,
print 'End'
for n in open('for.py','r').readline():
print n,
print 'End'
5、課堂講授代碼
這是我課堂講授的代碼,僅供大家參考:
#coding=utf⑻
import os
import string
print '貴州財經大學大數據金融學院,大家好!'
def fun1():
print 'Hello world'
print 'Goodbye!'
#計算和
def fun2(n, m):
return n+m
#輸出結果
fun1()
s = fun2(3,8)
print 'sum = ' + str(s)
print 'sum =', s
#判斷語句 u表示unicode字符串
if(s>10):
print u'大于10'
else:
print u'小于等于10'
#循環語句
i = 1
s = 0
while i<=100:
s = s + i
i = i + 1
else:
print 'end while'
print 'sum =', s
'''
輸出結果為:sum=5050
'''
#for循環
num = [2, 4, 6, 8, 10]
for x in num:
print x
輸出結果以下圖所示:
3. 安裝PIP及第3方包
接下來需要詳解介紹爬蟲相干的知識了,這里主要觸及到下面幾個知識:
爬蟲主要使用Python(字符串|urllib)+Selenium+PhantomJS+BeautifulSoup。
在介紹爬蟲及Urllib下載網頁或圖片之前,先交大家如何使用pip安裝第3方的庫。
PIP
在介紹介紹它們之前,需要安裝PIP軟件。正如xifeijian大神所說:“作為Python愛好者,如果不知道easy_install或pip中的任何1個的話,那末......”。
easy_insall的作用和perl中的cpan,ruby中的gem類似,都提供了在線1鍵安裝模塊的傻瓜方便方式,而pip是easy_install的改進版,提供更好的提示信息,刪除package等功能。老版本的python中只有easy_install,沒有pip。常見的具體用法以下:
easy_install的用法:
1) 安裝1個包
$ easy_install <package_name>
$ easy_install "<package_name>==<version>"
2) 升級1個包
$ easy_install -U "<package_name>>=<version>"
pip的用法
1) 安裝1個包
$ pip install <package_name>
$ pip install <package_name>==<version>
2) 升級1個包 (如果不提供version號,升級到最新版本)
$ pip install --upgrade <package_name>>=<version>
3)刪除1個包
$ pip uninstall <package_name>
第1步:下載PIP軟件
可以在官網http://pypi.python.org/pypi/pip#downloads下載,同時cd切換到PIP目錄,在通過python setup.py
install安裝。而我采取的是下載pip-Win_1.7.exe進行安裝,下載地址以下:
這里作者提供幾種方法供大家下載:
http://download.csdn.net/detail/eastmount/9598651
第2步:安裝PIP軟件
當提示"pip and virtualenv installed"表示安裝成功,那怎樣測試PIP安裝成功呢?
第3步:配置環境變量
此時在cmd中輸入pip指令會提示毛病“不是內部或外部命令”。
注意:兩種解決方法,1種是通過cd ..去到Srcipts環境進行安裝,pip install...
方法2:另外一種配置Path路徑。
需要添加path環境變量。PIP安裝完成后,會在Python安裝目錄下添加python\Scripts目錄,即在python安裝目錄的Scripts目錄下,將此目錄加入環境變量中便可!進程以下:
第4步:使用PIP命令
下面在CMD中使用PIP命令,“pip list outdate”羅列Python安裝庫的版本信息。
注意:安裝成功后,會在Python環境中增加Scripts文件夾,包括easy_install和pip。
PIP安裝進程中可能出現各種問題,1種解決方法是去到python路徑,通過python set_up.py install安裝;另外一種是配置Path環境比例。
課堂重點知識:
第1節課主要想讓大家體會下Python網絡爬蟲的進程及示例。需要安裝的第3方庫主要包括3個:
pip install httplib2
pip install urllib
pip install selenium
在安裝進程中,如果pip install urllib報錯,是由于httplib2包括了,可直接用。
注意:如果pip安裝報錯ascii編碼問題,需要把計算機名稱從中文修改成英文名。
4. Urllib下載網頁及圖片
在使用pip install urllib或pip install urllib2后,下面這段代碼是下載網頁。
#coding=utf⑻
import os
import urllib
import httplib2
import webbrowser as web
#爬取在線網站
url = "http://www.baidu.com/"
content = urllib.urlopen(url).read()
open("baidu.html","w").write(content)
#閱讀求打開網站
web.open_new_tab("baidu.html")
首先我們調用的是urllib2庫里面的urlopen方法,傳入1個URL,這個網址是百度首頁,協議是HTTP協議,固然你也能夠把HTTP換做FTP、FILE、HTTPS 等等,只是代表了1種訪問控制協議,urlopen1般接受3個參數,它的參數以下:
urlopen(url, data, timeout)
第1個參數url即為URL,第2個參數data是訪問URL時要傳送的數據,第3個timeout是設置超時時間。
第23個參數是可以不傳送的,data默許為空None,timeout默許為 socket._GLOBAL_DEFAULT_TIMEOUT。
第1個參數URL是必須要傳送的,在這個例子里面我們傳送了百度的URL,履行urlopen方法以后,返回1個response對象,返回信息便保存在這里面。
response = urllib2.urlopen("http://www.baidu.com")
print response.read()
response對象有1個read方法,可以返回獲得到的網頁內容。
獲得的網頁本地保存為"baidu.html",通過閱讀器打開以下圖所示:
然后是需要下載圖片,這里需要學會找到圖片的URL,以下圖百度的LOGO,可以通過閱讀器右鍵"審查元素"或"檢查"來進行定位。
定位URL后,再通過函數urlretrieve()進行下載。
#coding=utf⑻
import os
import urllib
import httplib2
import webbrowser as web
#爬取在線網站
url = "http://www.baidu.com/"
content = urllib.urlopen(url).read()
open("baidu.html","w").write(content)
#閱讀求打開網站
web.open_new_tab("baidu.html")
#下載圖片 審查元素
pic_url = "https://www.baidu.com/img/bd_logo1.png"
pic_name = os.path.basename(pic_url) #刪除路徑獲得圖片名字
urllib.urlretrieve(pic_url, pic_name)
#本地文件
content = urllib.urlopen("first.html").read()
print content
#下載圖片 審查元素
pic_url = "imgs/bga1.jpg"
pic_name = os.path.basename(pic_url) #刪除路徑獲得圖片名字
urllib.urlretrieve(pic_url, pic_name)
重點知識:
urllib.urlopen(url[, data[, proxies]]) :創建1個表示遠程url的類文件對象,然后像本地文件1樣操作這個類文件對象來獲得遠程數據。
urlretrieve方法直接將遠程數據下載到本地。
如果需要顯示進度條,則使用下面這段代碼:
import urllib
def callbackfunc(blocknum, blocksize, totalsize):
'''回調函數
@blocknum: 已下載的數據塊
@blocksize: 數據塊的大小
@totalsize: 遠程文件的大小
'''
percent = 100.0 * blocknum * blocksize / totalsize
if percent > 100:
percent = 100
print "%.2f%%"% percent
url = 'http://www.sina.com.cn'
local = 'd:\\sina.html'
urllib.urlretrieve(url, local, callbackfunc)
5. HTML網頁基礎知識及審查元素
HTML DOM是HTML Document Object Model(文檔對象模型)的縮寫,HTML DOM則是專門適用于HTML/XHTML的文檔對象模型。熟習軟件開發的人員可以將HTML DOM理解為網頁的API。它將網頁中的各個元素都看做1個個對象,從而使網頁中的元素也能夠被計算機語言獲得或編輯。
DOM是以層次結構組織的節點或信息片斷的集合。這個層次結構允許開發人員在樹中導航尋覓特定信息。分析該結構通常需要加載全部文檔和構造層次結構,然后才能做任何工作。由于它是基于信息層次的,因此 DOM 被認為是基于樹或基于對象的。
HTML DOM 定義了訪問和操作HTML文檔的標準方法。 HTML DOM 把 HTML 文檔顯現為帶有元素、屬性和文本的樹結構(節點樹)。它們都是1個節點(Node),就像公司的組織結構圖1樣。 我們現在從另外一個角度來審視源代碼,first.html的源碼以下:
<html>
<head>
<title>Python發掘開發</title>
</head>
<body>
歡迎大家學習《基于Python的Web大數據爬取實戰指南》! <br>
</body>
</html>
這個例子的第1個元素就是<html>元素,在這個元素的起始標簽和終止標簽之間,又有幾個標簽分別起始和閉合,包括<head>、<title>和<body>。<head>和<body>標簽是直接被<html>元素包括的,而<title>標簽則包括在<head>標簽內。要描寫1個HTML網頁的這類多層結構,用樹來進行類比是最好的方式。樹形結構以下圖所示:
重點:
在網絡爬蟲中,通常需要結合閱讀器來定位元素,閱讀器右鍵通常包括兩個重要的功能:查看源代碼和審查或檢查元素。
通過審查元素,可以定位到需要爬取圖片或網頁的HTML源文件,通常是table或div的布局,這些HTML標簽通常是成對出現的,如<html></html>、<div></div>等;同時會包括1些屬性id、name、class來指定該標簽。如:
<div id="content" name="n1" class="cc">....</div>
6. 安裝Selenium及網頁簡單爬取
Selenium用于Web利用程序測試的工具,摹擬閱讀器用戶操作,通過Locating Elements 定位元素。安裝進程以下圖所示,通過pip install selenium安裝。
注意:需要cd去到Scripts目錄進行安裝。

selenium結合閱讀器定位的基本函數包括:
推薦文章,同時下節課會詳細介紹。
[python爬蟲] Selenium常見元素定位方法和操作的學習介紹
第1個基于Selenium爬蟲的代碼,通過調用Firefox閱讀器:
#coding=utf⑻
import os
import urllib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
#Open PhantomJS
#driver = webdriver.PhantomJS(executable_path="phantomjs⑴.9.1-windows\phantomjs.exe")
driver = webdriver.Firefox()
#訪問url
driver.get("https://www.baidu.com/")
print u'URL:'
print driver.current_url
#當前鏈接: https://www.baidu.com/
print u'標題:'
print driver.title
#標題: 百度1下, 你就知道
#print driver.page_source
#源代碼
#定位元素,注意u1(數字1)和ul(字母L)區分
print u'\n\n定位元素id:'
info1 = driver.find_element_by_id("u1").text
print info1
#定位元素
print u'\n\n定位元素xpath:'
info3 = driver.find_element_by_xpath("//div[@id='u1']/a")
print info3.text
輸出以下圖所示:
希望這篇文章對你有所幫助,主要是介紹基本的安裝進程及體會下Python爬蟲知識,后面會陸續詳細介紹相干內容。非常想上好這門課,由于是我的專業方向,另外學生們真的好棒,好認真,用手機錄相、問問題、配環境等等,只要有用心的學生,我定不負你!同時,自己授課思路有些亂,還需加強,但還是挺享受的,畢竟9800,哈哈哈!
(By:Eastmount 2016-09⑴9 晚上10點 http://blog.csdn.net/eastmount/ )
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈