二十三、使用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           2238 
  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章

posted @ 2020-09-08 19:05  努力吧阿团  阅读(246)  评论(0编辑  收藏  举报