有些网页的数据格式不规范, 没有API, 我们希望通过脚本抓取特定数据. 可以这样来实现:
curl -s -H "Cache-Control: no-cache" -d @liuyao-data -X POST https://www.china95.net/paipan/liuyao/liuyao.asp |grep "象曰" | sed -En "s/.* (象曰.*)<p><p><p><\/span><\/td>/<ul>\r<li>\1<\/li>\r<\/ul>/p" | sed -En "s/ //pg" | sed -En "s/<p><,p>/<\/li>\n<li>/pg" |clip
解释下, -s
表示不要输出进度; -H
知道头文件(header), 这里主要是不用缓存. -X POST
表示用POST方法提交数据. -d @liuyao-data
表示需要提交的数据放在liuyao-data
中. 命令中, 接下来是请求的网址. 最后用了几个sed
来清理数据.
liuyao-data是通过如下的脚本生成的:
#!/bin/bash
postData="year=2019&month=4&day=20&hour=13&minute=16&mode=2&"
D2B=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1})
echo 'In put the order number of Gua:'
read guaOrder
if [[ $guaOrder -lt 0 || $guaOrder -gt 63 ]]; then
echo 'The input should between 0 and 63 (included)!'
else
guaSeq=${D2B[ $guaOrder ]}
for i in 1 2 3 4 5 6; do
#yao+="yao${i}=${guaSeq:6-$i:1}&"
yao+="yao${i}=${guaSeq:$i-1:1}&"
done
echo $guaSeq
yao=${yao//0/2}
echo "$postData${yao:0:-1}&dongyao=1" > liuyao-data
其实就是输入一个数, 将其转换为二进制(D2B
), 然后将其对应为卦象: 从左到右分别对应着卦象的第一爻到第六爻. 最后根据网站的数据格式, 用1表示少阳, 2表示少阴. 故我们需要将二进制中的0替换成2.
例如, 输入21, 则二进制为010101
, 而得到的liuyao-data为:
year=2019&month=4&day=20&hour=13&minute=16&mode=2&yao1=2&yao2=1&yao3=2&yao4=1&yao5=2&yao6=1&dongyao=1
网友评论