Base:
Created Monday 17 March 2014
什么是爬虫?
wiki解释:http://en.wikipedia.org/wiki/Web_spider
引用WIKI上的解释,爬虫说白就是首先就是一个程序(废话..),然后这个程序能做什么?他可以抓取网页,把数据保存下来。再网上一点说,光抓取网页没啥技术含量对吧?关键困难是从网页中分析提取和整理你想要的数据,正如弱水三千只取一Piao..百度Google搜索引擎什么的技术之一就是非常牛X的爬虫吧。
爬虫的原理?
咱们来动动手吧
下面需要用Python实现一个简易的Web Crawler.万能的Python Standrad Lib救救我吧~
在标准库中,python给我们提供了 urllib 模块,然后借助urllib模块,我们做一个这样的程序:
在标准库中,python给我们提供了 urllib 模块,然后借助urllib模块,我们做一个这样的程序:
Version 1.0 : 把任意某个网址的网页抓取下来并且打印出来:
import urllib url = "http://www.csdn.net" print urllib.urlopen(url).read()
没有错,你美看错。你已经写了一个最简单的爬虫了,你成功的把CSDN首页抓下来并打印到terminal中了,当然你回来到terminal刷的一排下来,看不清是吧?
那么好我们需要更新程序了哈哈,把V1.0 升级到V1.1,增加功能为把抓到的网页输入到文件中,并且保存为HTML,然后浏览器打开
那么好我们需要更新程序了哈哈,把V1.0 升级到V1.1,增加功能为把抓到的网页输入到文件中,并且保存为HTML,然后浏览器打开
Version 1.1 : 保存到文件中
#-*-coding:utf-8 import urllib #导入python标准库给我们提供的urllib url = "http://www.hao123.com" #这个是我们要抓取的网页地址,一定不要忘记有http://这个符号哦 tmp_file = open("/home/yg/Code/Python/tmp.html","w") #打开文件,传过去的参数的是你路径连文件名一起 tmp_file.write(urllib.urlopen(url).read()) #urllib.urlopen()大家可以查文档,意思穿过去url,a file-like object is returned tmp_file.close() #上完厕所要冲水,打开文件要关闭 #然后用浏览器打开文件看看
通过V1.1我们已经能把网页抓取下来并且保存在文件中了,可是每一次都需要open file close file 吗?那么有没有更快的方法呢?有。这次我们更新到V1.2版本
Version 1.2 : 用另一种方法也能保存在文件中
import urllib url = "http://www.hao123.com" filename = "./test.html" urllib.urlretrieve(url,filename) #urllib.urlretrieve()第一个参数为url 第二个参数为文件路径和文件名 #它直接把制定网页存储到本地文件中
通过v1.2我们已经知道有urllib.retrieve()的其中两个参数,让我们在update我们的版本,用urllib.urlretrieve()第三个参数
Version 1.3:这回我们增加网页下载进度显示哦
#-*-coding:utf-8-*- import urllib url = "http://www.hao123.com" filename = "./test.html" def reporthook(count,block_size,total_size): """ 回调函数 下载进度现实的函数 @count 已经下载的数据块的个数 是个数哦 @block_size 数据会的大小,一般都是多少多少字节哦 @totol_size 总的文件大小 有了这三个量我们就可以计算进度了哈 只要totol_size 等于 count * block_size 那就说明下载完毕了 """ per = (100.0 * count * block_size ) / total_size #per就是百分进度了 print "Download Percent: %.2f %%" % per down_log = urllib.urlretrieve(url,filename,reporthook) #reporthook是一个回调函数,就是你传函数名(其实是函数的指针,一个地址),然后它实现里面回调用你函数并传进去三个参数 print down_log
Version 1.4:是不是只能下载网页哈?能不能下载文件?咱们试一试