BASH解析网HTML的尝试
来源:互联网 发布:室内设计用哪些软件 编辑:程序博客网 时间:2024/04/28 23:38
起因:
每天都要用浏览器查看天气预报,然后用手机发给家里。
中国天气网的页面上有许多不必要的信息,正好最近在学习Liunx命令,就想用bash实现对网页信息解析只显示天气信息。
思路:
- 利用wget下载网页到本地
- 利用grep找到所需信息所在行号
- 按照行号读取相应行
- 再次用grep得到纯粹的天气信息
效果:
源信息:
<h1>周二</h1>
<h2>11日</h2>
<big class="jpg50 d01"></big>
<big class="jpg50 n00"></big>
<p class="wea" title="多云转晴">多云转晴</p>
<p class="tem tem1">
<span>20<
<li class="dn" data-dn="7d4">
/span><i>°C</i>
</p>
<p class="tem tem2">
<span>5</span><i>°C</i>
</p>
<p class="win">
<em>
<span title="无持续风向" class=""></span>
<span title="无持续风向" class=""></span>
</em>
<i>微风</i>
</p>
<div class="slid"></div>
期望结果:
周二
11日
多云转晴
20℃
15℃
微风
执行:
- 第一步:
很简单,不说了。 - 第二步:
cat $file | grep -n '<h2>[0-9]*日</h2>' | awk 'BEGIN{FS=":"} {printf "%-d ",$1}'
重点是后面`awk 'BEGIN{FS=":"} {printf "%-d ",$1}' `这个是现学现用的。
awk
: 文本处理神器
BEGIN{FS=":"}
: 指定":
"作为分隔符
{printf "%-d ", $1}
: 格式化输出行号
- 第三步:
由第二步得到的是3
,表示第三行,接下来把第三行及相关的6 8 11 18
共五个行号存在数组中:
for NUM in `cat $file | grep -n '<h2>[0-9]*日</h2>' | awk 'BEGIN{FS=":"} {printf "%-d ",$1}'`
do
((ln_num[((i++))]=$NUM))
((ln_num[((i++))]=$NUM+3))
((ln_num[((i++))]=$NUM+5))
((ln_num[((i++))]=$NUM+8))
((ln_num[((i++))]=$NUM+15))
done
在做第四步之前先把相应行显示出来看是否出错:
IFS="
"
for LINE in `cat $file`
do
((++j))
for MK in ${ln_num[*]}
do
if [ "$j" -eq "$MK" ]
then
echo $LINE
break
fi
done
done
第一次正确的显示出了源信息
中的3,6,8,11,18行,可是第二天网页更新后,得到的却不是相应的5行了。我打开html看到行数没错。我怎么也想不明白问题出在哪。真是奇怪。第三步先跳过,看第四步吧。
4. 第四步:
发现用grep过滤html太复杂,不易实现。
我想用python或sed或许可以,不过现在我还不太了解它们。
只好先到这了,等学习了python和sed后,应该能把第三步,第四步的问题一起解决。
收获:
其实这次最大的收获在于第二步中awk
命令的学习使用,是从酷壳的《AWK简明教程》学习到的。
date: 2014-11-9
- BASH解析网HTML的尝试
- java解析html之HTMLparser初次尝试
- HTML居中方法的尝试
- Bash下的git.multi_gc尝试(一)
- Bash下的git.multi_gc尝试(二)
- Bash下的git.multi_gc尝试(三)
- 小小的html的尝试,不太好
- Python中尝试用lxml去解析html
- 新手理解的bash环境变量解析漏洞
- 获取默认错误页面HTML的尝试(失败)
- 尝试在让script的type属性等于text/html
- 关于HTML form accept-charset 属性的若干尝试
- 解析HTML的类
- 关于Javascript解析XML跨浏览器的尝试
- C++ 用TinyXml 解析xml文件的一次尝试
- 解析Html页面:HTML Parser的试用
- 解析Html页面:HTML Parser的试用
- jericho-html解析html的一个例子
- 写在Android开发之初
- 可怜的js居然没有块级作用域
- 公交路线查询
- 『IOS』How to deal with Icon@2x.png in svn?
- 唐崇荣牧师谈灵恩派
- BASH解析网HTML的尝试
- spring mvc 拦截器
- tripleo之Ironic_python_agent的学习(一)
- 决策树c4.5(python3字典各种方法,map(),集合set()等,python树节点)
- linux shell
- java字符串编码认识误区说明
- 免费实用的如何把pdf转换成txt教程
- 在字符串中删除对应位数的字符,然后 输出删除指定字符后的字符串
- 关于Emgu CV或者OPENCV调用cvCreateFileCapture返回NULL的原因