缘由:为了将 上的openstack软件包下载下来,拉到本地做成yum源,可是openstack的软件包太多,一个一个靠点击势必要耗费很多时间,所以就拿起python写了个简单的爬虫程序来帮助自己下载。
Python,目前来看是一门很火的语言,尤其对于搞Linux运维的同胞来说,更是要熟悉和掌握。因为目前来看很多自动化,云计算的软件都是由python来开发,而且python也是一门跨平台的语言,似乎有了它你可以搞定一切,哈哈。据一个群里搞思科的人说,思科将来也将由python开发的界面来配置,这让我情何以堪。。。。。。
好,废话不说了,直接上代码。。。
#!/usr/bin/env python
#encoding: utf8
#
import urllib2
import urllib
import re
import os
downPath = ‘/home/python’
urlPath = ‘https://repos.fedorapeople.org/repos/openstack/openstack-icehouse/epel-6/’
res = r’href=”(.*[^src].rpm)”‘
Cres = re.compile(res)
content = urllib2.urlopen(urlPath).read()
softList = Cres.findall(content)
for i in softList:
urlSoftware = os.path.join(urlPath,i)
urllib.urlretrieve(urlSoftware,downPath + ‘/’ + “%s” % i)
以上就是一个完整的程序代码
解释:
#!/usr/bin/env python 该行内容是声明python开执行文件的位置,和写shell脚本一样。值得注意的是,这里我没有直接使用绝对路径,而是用env这个命令,来进入python的执行环境,从而能够解释python的代码
#encoding: utf8
该行内容是用来声明编码格式,可以支持中文的输出。如果没有,当脚本中存在中文时,就会发生 错。但是要注意utf8是在linux下使用的格式,如果你是在windows中,则需要改成cp936或者其他的中文编码。其次要注意,该行的开头有个:# ,这个符 不能省略,在这里不做注释用,这是一种规定吧。
downPath,urlPath:这是两个变量,downPath定义下载软件包要存放的路径,而urlPath定义的是要下载的软件包所在页面的url,而不是准备的软件包url。因为这里的url路径是要供后面urllib2.urlopen()函数来获取源代码信息的
res:是定义一个正则表达式,用来匹配要查找的内容,其中()中的内容就是要获取的软件包名
Cres:这是将res编译后赋值给该变量,编译后的正则表达式执行的速度要比没编译的快
content:该变量用来保存使用urllib2.urlopen()获取的源源代码内容,保存的形式是一个字符串
softList:该变量用来保存利用正则表达式在content字符串中查找,获取匹配的软件包名形成一个列表
最后一个for循环就是用来下载softList列表中所有的软件包。os.path.join()用来连接url和软件包名,形成每个软件包具体的url路径。而urllib.urlretrieve() 则是用来下载软件包,并保存到指定的路径。
这里需要说明的是路径的形式:downPath + ‘/’ + ‘%s’ % i
+:该符 在python中具有连字符的功能,能够连接前后两个相同类型的变量值
‘%s’ % i :这个是对变量的一种引用,%s是字符串格式化形式 % 是格式化符,即将i的值放在%s的位置。
‘/’:该符 在linux系统中是路径分隔符,此时需不需要该符 ,要看downPath的定义,如果downPath路径的后面有’/’符 ,则这里就不需要,否则则需要。注意,如果是windows下面,则路径分隔符就是‘’
因此假如软件包名为nginx-1.6.1.tar.gz,则这里的最终内容为:
/home/python/nginx-1.6.1.tar.gz 即将该软件下载到/home/python/目录下并保存为nginx-1.6.1.tar.gz
wow,看起来好啰嗦,但是不求高深,只求任何人看了都能直接上手使用,谁让我的博客叫笨蛋的技术呢,哈哈。。
好,到此结束。更多python技术文档请看下回分解。。。。。!!!!!
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树 络爬虫urllib211387 人正在系统学习中 相关资源:开源的爬虫软件Heritrix3.1.0_开源爬虫-Java工具类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!