十一 Linux Shell脚本攻略之web操作相关命令(wget,lynx,curl)
一 Web页面下载
用wget可以下载Web页面或远程 文件
语法:wget URL
#可以指定从多个URL处进行下载
wget URL1 URL2 URL3 ....
①可以通过选项 -O 指定输出文件名。如果存在同名文件,那么该文件会被下载文件所取代 wget http://www.knopper.net -O knopper.html 也可以用选项 -o 指定一个日志文件,这样日志信息就不会被打印到 stdout 了 wget ftp://ftp.example.com/somefile.img -O dloaded_file.img -o log ②由于不稳定的互联网连接,下载有可能被迫中断。选项 -t 可以指定在放弃下载之前尝试多少次 wget -t 5 URL #将 -t 选项的值设为0会强制 wget 不断地进行重试 ③下载限速,选项 --limit-rate 可以限定下载任务能够占有的最大带宽,从而保证其他应用程序能够公平地访问Internet wget --limit-rate 20k http://example.com/file.iso 说明:在命令中可以用 k (千字节)和 m (兆字节)指定速度限制 ④选项--quota或-Q可以指定最大下载配额.配额一旦用尽,下载随之停止。在下载多个文件时,对于存储空间有限的系统,限制总下载量是有必要的 wget -Q 100m http://example.com/file1 http://example.com/file2 ⑤断点续传 如果 wget 在下载完成之前被中断,可以利用选项 -c 从断点开始继续下载 wget -c URL ⑥复制整个网站(镜像) wget 像爬虫一样以递归的方式遍历网页上所有的URL链接,并逐个下载 wget --mirror --convert-links exampledomain.com ⑦访问需要认证的HTTP或FTP页面 wget --user username --password pass URL 也可以不在命令行中指定密码,而是在网页上手动输入密码,这就需要将 --password 改为--ask-password
二 纯文本网页浏览器 Lynx
Lynx是一款基于命令行的Web浏览器,能够以纯文本形式下载Web网页
#选项 -dump 能够以纯ASCII编码的形式下载Web页面 [root@rwwh rh]# lynx www.baidu.com/index.html -dump > ttt.txt [root@rwwh rh]# cat ttt.txt [bd_logo1.png] ____________________ 百度一下 [1]新闻 [2]hao123 [3]地图 [4]视频 [5]贴吧 [6]登录 [7]更多产品 [8]关于百度 [9]About Baidu ©2017 Baidu [10]使用百度前必读 [11]意见反馈 京ICP证030173号 [gs.gif] References 1. http://news.baidu.com/ 2. http://www.hao123.com/ 3. http://map.baidu.com/ 4. http://v.baidu.com/ 5. http://tieba.baidu.com/ 6. http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 7. http://www.baidu.com/more/ 8. http://home.baidu.com/ 9. http://ir.baidu.com/ 10. http://www.baidu.com/duty/ 11. http://jianyi.baidu.com/
三 cURL
cURL可以使用HTTP、HTTPS、FTP协议在客户端与服务器之间传递数据。它支持POST,cookie、认证、从指定偏移处下载部分文件、参照页(referer)、用户代理字符串、扩展头部、限速、文件大小限制、进度条等特性。cURL可用于网站维护、数据检索以及服务器配置核对
①#将下载的文件输出到stdout curl URL ②选项-O指明将下载数据写入文件,采用从URL中解析出的文件名。注意,其中的URL必须是完整的,不能仅是站点的域名 选项--silent表示不显示进度条 curl www.baidu.com/index.html --silent -O ③ 选项 -o 可以指定输出文件名。如果使用了该选项,只需要写明站点的域名就可以下载其主页了 [root@rwwh rh]# curl www.baidu.com -o index.txt % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 103 2381 103 2381 0 0 45980 0 --:--:-- --:--:-- --:--:-- 99208
④如果需要在下载过程中显示形如 # 的进度条,可以使用选项 --progress :
[root@rwwh rh]# curl www.baidu.com -o index.txt --progress
######################################################################## 100.0%
⑤断点续传
cURL能够从特定文件的偏移处继续下载
curl URL/file -C offset
偏移量是以字节为单位的整数。如果只是想断点续传,那么cURL不需要指定准确的字节偏移。要是你希望cURL推断出正确的续传位置,请使用选项 -C - ,就像这样:
curl -C - URL #cURL会自动计算出应该从哪里开始续传
⑥用cURL设置cookie
选项 --cookie, 可以指定提供哪些cookie。cookies需要以 name=value的形式来给出。多个cookie之间使用分号分隔:
curl http://example.com --cookie "user=username;pass=hack"
#选项 --cookie-jar 可以将cookie另存为文件
curl URL --cookie-jar cookie_file
⑦用cURL设置用户代理字符串
cURL的选项 --user-agent 或 -A 用于设置用户代理
curl URL --user-agent "Mozilla/5.0"
cURL也能够发送其他HTTP头部信息。使用 -H "Header" 传递多个头部信息
curl -H "Host: www.knopper.net" -H "Accept-language: en" URL
⑧限定cURL可占用的带宽
#在命令中用 k (千字节)和 m (兆字节)指定下载速度限制
curl URL --limit-rate 20k
⑨指定最大下载量
#可以用 --max-filesize 选项指定可下载的最大文件大小
#如果文件大小超出限制,命令返回一个非0的退出码。如果文件下载成功,则返回0.
curl URL --max-filesize bytes
⑩用cURL进行认证
可以用 curl 的选项 -u 完成HTTP或FTP认证
使用 -u username:password 来指定用户名和密码
curl -u user:pass http://test_auth.com
如果你喜欢经提示后输入密码,只需要使用用户名即可:
$ curl -u user http://test_auth.com
⑪只打印响应头部信息(不包括数据部分)
选项 -I 或 --head 可以只打印HTTP头部信息,无须下载远程文件:
[root@rwwh rh]# curl --head www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 277
Content-Type: text/html
Date: Thu, 06 Aug 2020 14:11:00 GMT
Etag: "575e1f60-115"
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
示例一:图片爬取器及下载工具
#!/bin/bash #用途:图片下载工具 #文件名: img_downloader.sh if [ $# -ne 3 ]; then echo "Usage: $0 URL -d DIRECTORY" exit -1 fi while [ $# -gt 0 ] do #用来解析参数名 case $1 in -d) shift; directory=$1; shift ;; *) url=$1; shift;; esac done mkdir -p $directory; baseurl=$(echo $url | egrep -o "https?://[a-z.\-]+") echo Downloading $url curl -s $url | egrep -o "<img[^>]*src=[^>]*>" | \ sed 's/<img[^>]*src=\"\([^"]*\).*/\1/g' | \ sed "s,^/,$baseurl/," > /tmp/$$.list cd $directory; while read filename; do echo Downloading $filename curl -s -O "$filename" --silent done < /tmp/$$.list
######################shift用法***************
shift 用来向左移动参数,这样 $2 的值就会被赋给 $1,$3 的值被赋给 $2 ,往后以此类推。因此通过 $1 就可以求值所有的参数
[root@rwwh ~]# cat test.sh
#!/bin/bash
until [ $# -eq 0 ]
do
echo "第一个参数:$1,参数个数为:$#"
shift
don
[root@rwwh ~]# ./test.sh 1 2 3 4 5 6
第一个参数:1,参数个数为:6
第一个参数:2,参数个数为:5
第一个参数:3,参数个数为:4
第一个参数:4,参数个数为:3
第一个参数:5,参数个数为:2
第一个参数:6,参数个数为:1
浙公网安备 33010602011771号