十一 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

 

posted on 2020-08-04 22:39  rwwh  阅读(463)  评论(0)    收藏  举报

导航