美文网首页
利用curl抓取网络数据

利用curl抓取网络数据

作者: 破旧的大卡车 | 来源:发表于2019-04-20 18:37 被阅读0次

有些网页的数据格式不规范, 没有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/.*&nbsp;(象曰.*)<p><p><p><\/span><\/td>/<ul>\r<li>\1<\/li>\r<\/ul>/p" | sed -En "s/&nbsp;//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

相关文章

网友评论

      本文标题:利用curl抓取网络数据

      本文链接:https://www.haomeiwen.com/subject/hkblgqtx.html