觉得国外的yum库下载太慢,就搞一个mirror玩玩。需求较为简单:给定一个url,把url显示出来的rpm为后缀的文件全部下载到本地。写脚本解决问题当日最简单了,所以我就出了个菜鸟的思路:
实现到代码如下:
#!/usr/bin/env python
import os
url = 'http://download.fedora.redhat.com/pub/epel/5Server/x86_64/'
os.system('wget '+ url)
for line in open('index.html','r').readlines():
start = line.find('
if start != -1:
str = line[start:line.find('')]
if str.endswith('rpm'):
os.system('wget '+url + str.split('\"')[1]);
代码看起来总是觉得很别扭。由于对字符串的操作没有深入思考如何弄,仅仅看了相关规则实现了需求,所以不能不找鱼哥 @nnfish 求助优化一下。使用正则表达式优化后的操作代码如下:
import urllib,re,os
url = 'http://download.fedora.redhat.com/pub/epel/5Server/x86_64/'
data = urllib.urlopen(url).read()
urls = re.findall(r'href="(.*\.rpm?)"', data)
for url in urls:
os.system('wget '+url)
用Python写的一个HTML/XML的解析器Beautiful Soup来处理相关到html字符串也是一个好的选择,可以搜索引擎上搜索学习具体操作