AI智能摘要
想把163镜像站的所有yum包一键镜像到本地吗?这篇文章给出了一段实用Python脚本:用requests和BeautifulSoup抓取指定目录下的所有文件链接,再用wget批量下载到本地,适合搭建离线或内网yum源。摘要里说明了脚本核心流程(请求页面、解析标签、拼接下载链接、调用系统wget)和适用场景,读后你能快速复制运行并根据需要改造目录或并发下载策略,省去手动逐个抓包的繁琐。
— AI 生成的文章内容摘要
用于搭建本地yum源,编写了一个小脚本,将163官方站点的yum文件全部下载到本地。
#!/usr/bin/python
import requests
from bs4 import BeautifulSoup
import os
link_list = []
downurl = []
s = requests.session()
url = "http://mirrors.163.com/centos/7/os/x86_64/Packages/"
response = s.get(url)
text = response.text
soup = BeautifulSoup(response.content,'lxml')
a = soup.find_all('a')
for x in a:
link = x.get('href')
if link:link_list.append(link)
for filename in link_list:
down = url + filename
downurl.append(down)
get = os.popen("wget %s"%down)
print get.read()
http://www.oniont.cn/index.php/archives/5.html

上海市 1F
这个脚本直接抓目录挺省事的,跑一下就有一堆包了,但wget并发要注意别把源弄封了。
浙江省台州市椒江区 2F
爬下载列表前最好加个判断排除上级目录和非rpm文件,不然会多下来很多无用东西。
江苏省常州市 3F
目录里有很多符号链接,直接拼接有时会出错,建议用requests.head先检查下链接是否可下载。
陕西省西安市 4F
这个方法对小规模本地yum源够用,我之前用过,搭建好后用createrepo就行了。
新加坡 5F
wget一条条串行太慢,建议用aria2或用多线程下载,效率能上去好几倍。
韩国 6F
请问作者用的Python版本是啥?3.x的话os.popen那块能改成subprocess更可靠吗?
河南省郑州市 7F
前几天刚弄过这个,确实折腾了好久,最后还是用rsync镜像更稳一些。
澳大利亚 8F
rargh,这样下载会把父目录也拉下来,得在过滤里加上../和/的判断,免得混乱。
日本 9F
脚本没做重试和断点续传,网络波动一下就可能失败,最好加个重试逻辑或者用wget的参数。
浙江省丽水市 10F
感觉得加个User-Agent和限速参数比较好,别太像爬虫被封IP了🙂
浙江省杭州市 B1
@ 无形之刃 加User-Agent确实有必要,我上次没加直接被403了
北京市 11F
这脚本写得很实用,拿来就能用
浙江省杭州市 12F
Python2还是3?代码里有些地方可能需要调整
江苏省徐州市 B1
@ 蹦跶小狗 Python3跑os.popen会报错,得换成subprocess
日本 13F
可以加个进度条显示下载情况,不然等半天没反应心里没底
北京市 14F
直接用rsync同步整个目录不是更方便吗?
台湾省 15F
之前用类似方法下载过,确实要注意别被服务器拉黑
北京市 B1
@ 漠影 163源对爬虫挺敏感的,最好sleep一下再下
江苏省南京市 16F
wget改成多线程会不会被封IP啊?有点担心
福建省厦门市 B1
@ DoppelgangerGrin 多线程别开太高,我试过5个并发就差点被限了
北京市 17F
脚本能加个校验md5的功能就更完美了
香港 18F
这个对搭建内网yum源很有帮助,收藏了
湖北省荆州市 B1
@ GhostOfDusk 内网yum源搭起来真不省心,这脚本能省点事
北京市 19F
有没有试过用curl代替wget?感觉更轻量一些
韩国 20F
下载完还要createrepo建索引吧,建议把这条也写上
甘肃省平凉市泾川县 21F
这脚本跑起来卡半天,加个进度条吧😅
广东省深圳市 22F
符号链接那块坑死我了,直接拼路径会404
美国 23F
有人试过用aria2批量下吗?感觉比wget稳
湖南省长沙市 24F
createrepo那步漏了,新手可能不知道要建索引
印度 25F
我之前也踩过这坑,最后还是rsync香
山东省淄博市 26F
求问能过滤只下特定版本的包不?
上海市 B1
@ 小巨人 想下指定版本的包得自己改过滤逻辑吧?比如正则匹配文件名
广东省广州市 27F
直接wget确实慢,但简单粗暴能跑就行
日本 28F
用requests+bs4抓链接,这思路还挺巧的
河南省洛阳市 29F
这脚本跑起来太慢了,串行下载真的顶不住
广东省广州市 30F
符号链接问题坑死我了,拼完路径一堆404
上海市 31F
有人试过用aria2吗?感觉比wget稳还快
福建省厦门市 32F
createrepo那步真不能漏,不然yum装不了包
陕西省西安市 33F
循环里加个sleep吧,不然容易被163限速
日本 34F
新手问下,下载完直接放http目录就行了吗?
日本 35F
限速+随机延时比较稳妥,别把人家源打挂了😅
辽宁省 36F
Python3的话os.popen换成subprocess更靠谱吧