第一部分主要简单介绍三个问题(觉得无聊的直接调至第二部分):
1、什么是大数据?
2、什么是数据挖掘?
3、大数据和数据挖掘的区别?
由于前面几节课老师普及了大数据等一些基础知识,这里我并没有详细介绍,只是给几张图片,让大家简单了解下大数据和数据挖掘相关的基础概念,我分享更多的是实战以及编程。
<一>.大数据(Big Data)
大数据(big data)指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。
下图是大数据经典的4V特征。
说到大数据,就不得不提Hadoop,而说到Hadoop,又不得不提Map-Reduce。
<一>.安装Python
在开始使用Python编程之前,需要介绍Python的安装过程。python解释器在Linux中可以内置使用安装,windows中需要去http://www.python.org官网downloads页面下载。具体步骤如下:
第一步:打开Web浏览器并访问http://www.python.org官网;
选中上图中第三个图标,即点击“Python (command line)命令行模式”,运行程序输入如下代码:
print 'hello world'
则python命令行模式的解释器会打印输出“hello world”字符串,如下图所示。
选中图中的第一个图片,点击“IDLE (Python GUI)”,即运行Python的集成开发环境(Python Integrated Development Environment,IDLE),运行结果如下图。
注意2:建议大家使用IDLE写脚本,完整的代码而不是通过命令行模式。
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,输出结果如下图所示。
需要注意的是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'
#循环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为成员资格运算符,检查一个值是否在序列中。同样可以使用break和continue跳出循环。
下面是文件循环遍历的过程:
#文件循环遍历三种对比 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'
#coding=utf-8 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输出结果如下图所示:
接下来需要详解介绍爬虫相关的知识了,这里主要涉及到下面几个知识:
easy_install的用法: 1) 安装一个包 $ easy_install <package_name> $ easy_install "<package_name>==<version>" 2) 升级一个包 $ easy_install -U "<package_name>>=<version>" pip的用法 1) 安装一个包 $ pip install <package_name> $ pip install <package_name>==<version> 2) 升级一个包 (如果不提供version号,升级到最新版本) $ pip install --upgrade <package_name>>=<version> 3)删除一个包 $ pip uninstall <package_name>
第一步:下载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
第二步:安装PIP软件
在使用pip install urllib或pip install urllib2后,下面这段代码是下载网页。
#coding=utf-8 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方法,传入一个URL,这个网址是百度首页,协议是HTTP协议,当然你也可以把HTTP换做FTP、FILE、HTTPS 等等,只是代表了一种访问控制协议,urlopen一般接受三个参数,它的参数如下:
urlopen(url, data, timeout)第一个参数url即为URL,第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。
response = urllib2.urlopen("http://www.baidu.com") print response.read()response对象有一个read方法,可以返回获取到的网页内容。
#coding=utf-8 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)
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)
HTML DOM是HTML Document Object Model(文档对象模型)的缩写,HTML DOM则是专门适用于HTML/XHTML的文档对象模型。熟悉软件开发的人员可以将HTML DOM理解为网页的API。它将网页中的各个元素都看作一个个对象,从而使网页中的元素也可以被计算机语言获取或者编辑。
<html> <head> <title>Python挖掘开发</title> </head> <body> 欢迎大家学习《基于Python的Web大数据爬取实战指南》! <br> </body> </html>这个例子的第一个元素就是<html>元素,在这个元素的起始标签和终止标签之间,又有几个标签分别起始和闭合,包括<head>、<title>和<body>。<head>和<body>标签是直接被<html>元素包含的,而<title>标签则包含在<head>标签内。要描述一个HTML网页的这种多层结构,用树来进行类比是最好的方式。树形结构如下图所示:
Selenium用于Web应用程序测试的工具,模拟浏览器用户操作,通过Locating Elements 定位元素。安装过程如下图所示,通过pip install selenium安装。
注意:需要cd去到Scripts目录进行安装。
selenium结合浏览器定位的基本函数包括:
#coding=utf-8 import os import urllib from selenium import webdriver from selenium.webdriver.common.keys import Keys #Open PhantomJS #driver = webdriver.PhantomJS(executable_path="phantomjs-1.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 #标题: 百度一下, 你就知道 #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输出如下图所示: