浏览模式: 标准 | 列表 Tag: wget

解决wget操作Cannot write to和filename too lon...

在Linux的系统中,有时候需要wget下载一个文件,而下载地址中的文件名却非常长,导致下载失败,提示:Cannot write to和filename too long

解决这个问题只需要把下载的文件输出为一个固定的文件名,比如:out.zip

wget -c -O out.zip "http://blog.is36.com/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz.zip"

Tags: wget

解决CentOS下wget操作无法resolve(解析)问题

在某个VPS上执行wget操作结果超时,信息如下:

  • wget http://blog.is36.com/
  • --2012-09-15 09:13:14--  http://blog.is36.com/
  • Resolving  blog.is36.com... failed: Temporary failure in name resolution.
  • wget: unable to resolve host address `blog.is36.com'

返回的错误很明显,就是无法解析,出现这个问题与nameserver有关,修改/etc/resolv.conf文件即可。

查看/etc/resolv.conf文件内容如下:

  • nameserver 205.185.112.68
  • nameserver 205.185.112.69

改成OpenDNS的一组解析服务器即可:

  • nameserver 208.67.222.222
  • nameserver 208.67.220.220

Tags: centos, wget, resolve

利用wget配合bash脚本同时下载多个文件

先把需要下载的文件写入到一个文件中,命名为urls.txt,比如:

  • http://blog.is36.com/a.jpg
  • http://blog.is36.com/b.jpg
  • http://blog.is36.com/c.jpg

再写一个bash脚本,如下:

  • while read url
  • do
  • wget -b "$url" -o /dev/null
  • done < urls.txt

或者是:wget -b -i url.txt

如果需要多次循环下载urls.txt中的文件,则如下(例子代表重复20次):

  • for (( i = 0; i < 20; i++))
  • do
  •     while read url
  •     do
  •     wget -b "$url" -o /dev/null
  •     done < urls.txt
  • done

Tags: wget

抛开体力劳动Linux下bash双重循环下载文件

需求:有一个网站,提供视频在线播放,视频格式为flv,视频路径直接写在网页源代码中,而视频路径每一次的请求都不一样,比如某个视频在网页源代码中的地址为:http://url/dl/88bd09b075a2033d8b515fae13398253/4f0fa279/1.flv,每一次刷新页面查看源代码,代码中dl后和1.flv之间的代码就会改变,系统这样生成的随机地址就是防盗链,而经测试,如果所生成的视频flv地址在经过三五分钟未经引用(播放),那么该地址就会失效,需要重新刷新页面获得地址,正因为如此,所以用不了迅雷,只能自己写个程序多线程一个个视频下载,每次下载前都是获得新请求到的视频地址。

基于此,在Linux下写一个bash程序,构造双重循环下载视频文件,考虑到系统自带的wget下载工具单线程太不给力,正冰简单写的这个就直接用了《Linux下多线程下载工具推荐:myget》。

程序功能如下(程序命名为zb,以下同):

  1. 先判断程序是否将下载列表跟到程序后面
  2. 将下载列表里的下载网址取出
  3. 使用curl获取页面源代码并将flv一行的数据单独导出到tmp文件,这里填出该行数据:so.addVariable('file','http://url/dl/88bd09b075a2033d8b515fae13398253/4f0fa279/1.flv');
  4. 然后将视频完整地址通过sed命令提取出来并输出到tmp2文件
  5. 调用mytget工具将tmp2中的视频地址进行多线程下载

程序使用方法:

  1. 先使用vi编辑器将待下载的网页地址写入到一个文本中(建立待下载的下载列表),一行一个目标网址(这些网址可以使用类似火车采集器这类软件先批量抓取下来),保存为list文件名
  2. 使用$./zb list 命令下载(多线程下载工具采用10线程进行下载,速度不错)
  3. 等待程序完成下载

程序代码: 

  • if [ "$1" == "" ]; then
  •     printf "need url list"
  •     exit 1
  • fi
  •  
  • for x in $(cat $1)
  • do
  •     curl $x | grep flv>tmp
  •     cat tmp  | sed "s/\(.*\),'\(.*\)'\(.*\)/\2/g">tmp2
  •         for y in $(cat tmp2)
  •         do
  •         mytget -n 10 $y
  •         done
  • done
  •  
  • rm -rf tmp*
  • rm -rf $1

Tags: wget

Linux下使用wget工具下载整站

有时候为了方便模仿某些网站,需要使用下载整站工具把模板网站所有可索引(访问)的资源下载下来,并保存成与服务器相同的目录结构。

正冰给大家介绍一种简便的工具,那就是linux下的wget工具,使用方法: 

wget -r -p -np -k http://URL

  • -r:在本机建立服务器端目录结构;
  • -p: 下载显示HTML文件的所有图片;
  • -np:只下载目标站点指定目录及其子目录的内容;
  • -k: 转换非相对链接为相对链接。

比如需要下载本站某篇文章的所有资源,网址为http://blog.is36.com/linux_wget_tool_download_website/

那么命令就是:wget -r -p -np -k http://blog.is36.com/linux_wget_tool_download_website/

也就是从当前页面开始镜像整个网站到本地,使用这个工具下载整站的好处是:下载的资源纯净(某些商业软件在未注册情况下会在网页里加版权)、方便;坏处就是单线程比较慢,只适合下载简单的网站。

如果不想看下载的过程,就把下载放到background后面运行,只需要再加上-b参数即可。

当然,windows下也有wget工具,去搜索下载吧,下载后的使用方法跟linux下一样。

Tags: linux, wget