缘由:为了将网上的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或者其他的中文编码。其次要注意,该行的开头有个:# 号,这个符号不能省略,在这里不做注释用,这是一种规定吧。

import开头的几行,都是导入要用到的模块。urllib2,urllib看起来很相似,都是处理weburl的,但是也有区别。至于有什么区别自己看着办。。。。。  re模块提供了正则表达式的功能,os模块提供了跟系统操作有关的功能

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技术文档请看下回分解。。。。。!!!!!

转载于:https://blog.51cto.com/mingyang/1543394

Python爬虫之:下载软件包相关推荐

  1. python爬虫下载-python爬虫之下载文件的方式总结以及程序实例

    python爬虫之下载文件的方式以及下载实例 目录 第一种方法:urlretrieve方法下载 第二种方法:request download 第三种方法:视频文件.大型文件下载 实战演示 第一种方法: ...

  2. python 下载文件-python爬虫之下载文件的方式总结以及程序实例

    python爬虫之下载文件的方式以及下载实例 目录 第一种方法:urlretrieve方法下载 第二种方法:request download 第三种方法:视频文件.大型文件下载 实战演示 第一种方法: ...

  3. python爬虫批量下载“简谱”

    python讨论qq群:996113038 导语: 上次发过一篇关于"python打造电子琴"的文章,从阅读量来看,我们公众号的粉丝里面还是有很多对音乐感兴趣的朋友的.于是,今天我 ...

  4. 新一配:perl循环调用python爬虫批量下载喜马拉雅音频

    新一配:perl循环调用python爬虫批量下载喜马拉雅音频 手机下载喜马拉雅音频后,获得的音频文件虽然可以转成mp3格式,但其文件名却是一长串字符串,无法辨别是哪一集,网上找了各种工具,都有局限性, ...

  5. Python爬虫实战——下载小说

    Python爬虫实战--下载小说 前言 第三方库的安装 示例代码 效果演示 结尾 前言 使用requests库下载开源网站的小说 注意:本文仅用于学习交流,禁止用于盈利或侵权行为. 操作系统:wind ...

  6. 2021-04-01裁判文书网数据python爬虫更新下载

    长期持续更新数据 2020-11-08裁判文书网数据python爬虫更新下载添加链接描述 截至3月已从数据库中下载1亿1200万条裁判文书数据,有需要数据的伙伴可以(。・∀・)ノ゙嗨前台QQ7900- ...

  7. 【爬虫实战项目】Python爬虫批量下载音乐飙升榜并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载音乐飙升榜并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是 ...

  8. 2020-11-08裁判文书网数据python爬虫更新下载

    2020年9月1日更新 文书网2020年8月31日晚更新之后就需要手机注册验证登录了,所以,账号是个问题. 分析 1. 登录 比较简单哦,主要难题是多账号的登录及session的更新维护. 2.其它 ...

  9. 【爬虫实战项目】Python爬虫批量下载评书音频并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载评书音频并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这 ...

  10. Python爬虫——urllib下载和订制请求对象

    文章目录 Python爬虫--urllib下载和订制请求对象 1.urllib下载资源 2.定制请求 Python爬虫--urllib下载和订制请求对象 1.urllib下载资源 下载资源使用urll ...

最新文章

  1. Dynamics Ax 2012 – AIF Import CSV File
  2. ESP32模块的MicroPython的基本实验
  3. 计算机动画制作 实验要求,A074计算机动画制作实验——动画制作初步
  4. sql server set赋值和select 赋值的区别以及使用方法
  5. java 编译开关_java – 字符串是关于开关的数字类型,并始终编译为lookupswitch?
  6. linux 正在运行的程序不能拷贝_如何实现在Windows上运行Linux程序,附示例代码
  7. java document select_javasript 操作option select
  8. 计算机常用控温算法,常用温度控制方法原理 -解决方案-华强电子网
  9. priority_queue 用法总结
  10. Python入门--字符串的查询操作,find,rfind,index,rindex
  11. android启动服务的生命周期,Android Service的两种启动方式以及生命周期
  12. php 工厂模式作用,PHP工厂模式的好处概述
  13. FastDFS原理介绍及集群搭建
  14. Unity 实现部分模型流光效果
  15. movie计算机英语作文,my favorite movie英语作文100字
  16. exchange2016卸载报错安装程序无法卸载,因为mscorsvw(9476)具有打开的文件
  17. BabaSSL:支持半同态加密算法 EC-ElGamal
  18. 博客赚钱也疯狂--个人博客如何赚钱
  19. c语言错误:error C2018: unknown character '0xa3'
  20. 6G需要1000亿个基站;5G套餐资费年内或降至50至60元;国内首款L4级5G无人驾驶汽车量产...

热门文章

  1. c语言用指针删除链表free,leetcode剑指 Offer 18(删除链表的节点)--C语言实现
  2. oracle profile为何被修改了,【图片】快被oracle玩死了,谁能告诉我为啥插入条数不同结果差别这么大!【java吧】_百度贴吧...
  3. java 创建静态方法_Java 在静态方法中创建Local类
  4. java48关键_Java48个关键字速查表
  5. 几何画板手机版_钉钉+几何画板+手写板,网络授课变简单
  6. 帝国cms tag生成html,帝国CMS Tag关键词自动锚文本插件 tag标签自动转换为内容内链...
  7. Spring Security UserDetail
  8. pandas to_sql
  9. Flask 应用上下文
  10. pandas 散布矩阵