二十三、使用Lynx获取天气数据脚本
Lynx是一款1992年编写的基于文本的浏览器
这个脚本看着很好玩,学习一下
安装lynx
[root@tzPC 25Unit]# yum list | grep lynx lynx.x86_64 2.8.8-0.3.dev15.el7 base
[root@tzPC 25Unit]# yum install -y lynx
配置文件lynx.cfg
lynx默认配置文件存放路径为:/usr/local/lib/lynx.cfg
Centos以及大部分发行版路径为:/etc/lynx.cfg
Ubuntu路径为:/etc/lynx-curl/lynx.cfg
配置文件中条目格式为
PARAMETER:value
#参数
相当于键值对
其中要注意的是noproxy参数,用于访问某些网站不使用代理,他的值是可以用逗号分隔的。
获取数据
使用-dump选项,直接将访问到的网页使用文本格式输出
[root@tzPC 25Unit]# lynx -dump https://www.tianqi.com/chengdu/
这里有两种方式得到数据
第一种
将lynx -dump的输出导入到文本文件,找出目标数据在多少行,再使用sed截取
[root@tzPC 25Unit]# lynx -dump https://www.tianqi.com/chengdu/ > tianqi.txt
在vim中使用set nu命令查看需要的数据在多少行
31 成都 32 33 [54][切换城市] 34 2020年09月09日 星期三 庚子年七月廿二 35 [b2.png] 36 37 22℃ 38 39 阴21 ~ 26℃
找到天气那一行,去掉行首空格制表符
[root@tzPC 25Unit]# sed -n '39s/^[ \t]*//p' tianqi.txt 多云22 ~ 29℃
合起来如下
[root@tzPC 25Unit]# lynx -dump https://www.tianqi.com/chengdu/ |sed -n '39s/^[ \t]*//p' 多云22 ~ 29℃
第二种,也就是书里的方式
查找指定字符串,截取数据
[root@tzPC 25Unit]# sed -n '/54\]\[/{n;p}' tianqi.txt 2020年09月09日 星期三 庚子年七月廿二
脚本整体如下
截取温度
[root@tzPC 25Unit]# cat sedtemp /54\]\[/{ n n n n p }
截取时间
[root@tzPC 25Unit]# cat sedtime /54\]\[/{ n p }
去除空格
[root@tzPC 25Unit]# cat sedspace s/^[ \t]*//p
脚本主体
[root@tzPC 25Unit]# cat weather.sh #!/bin/bash #extract提取 the current weather for ChengDu URL="https://www.tianqi.com/chengdu/" LYNX=$(which lynx) $LYNX -dump $URL > tmp_tianqi curr_time=$(cat tmp_tianqi | sed -n -f sedtime|sed -n -f sedpace) temp=$(cat tmp_tianqi |sed -n -f sedtemp | sed -n -f sedpace) rm -f tmp_tianqi echo "今天是 $curr_time" echo "室外温度为 $temp"
效果
[root@tzPC 25Unit]# bash weather.sh 今天是 2020年09月09日 星期三 庚子年七月廿二 室外温度为 23℃
也可以放入$HOME/.bashrc里
tianqi=`lynx -dump https://www.tianqi.com/chengdu/ |sed -n '39s/^[ \t]*//p'` echo "今天是`date +"%Y年%m月%d日"`,$tianqi"
重新登录服务器
Connecting to 10.122.0.110:22... Connection established. To escape to local shell, press 'Ctrl+Alt+]'. Last login: Wed Sep 9 17:08:13 2020 from 10.122.0.110 今天是2020年09月09日,多云21 ~ 25℃ [root@tzPC ~]#
哈哈,一个好玩的脚本
关于lynx跟curl的区别
有时候curl访问会显示403拒绝访问,lynx不会
lynx还会有标号
学习来自:《Linux命令行与Shell脚本大全 第3版》第25章
今天的学习是为了以后的工作更加的轻松!