首页 > Linux, SEO/SEM > linux bash查询百度排名脚本rank.sh

linux bash查询百度排名脚本rank.sh

2013年7月8日 发表评论 阅读评论

今天写了个"bash"脚本"rank.sh",用来查询指定域名和关键字在百度搜索引擎的排名,记录下:


"rank.sh"脚本主要用到的命令:

1. xxd命令: "xxd"能将文本转为16进制,再用"sed"实现每两个字符前插入一个"%"符号,即可在bash实现"url编码"的功能,如:

  1. # echo '中文'|xxd -plain | sed 's/\(..\)/%\1/g'
  2. %e4%b8%ad%e6%96%87%0a

2. curl: 用来搜索关键字并抓结果,"curl"的用法参考:Linux curl命令参数详解

3. sed: 本来"rank.sh"脚本大部分功能应该由"sed"命令实现的,遗憾的是"sed"不支持"非贪婪模式",如:

  1. # echo "1<p>2</p>3<p>4</p>5" | sed 's#<p>.*\?</p>##g'
  2. 15 #期望结果为135,输出的结果却是15

虽然本例可以通过下列正则表达式实现,但是在特殊场合不支持"非贪婪模式",依然是一件很悲剧的事情,所以"rank.sh"脚本大部分功能实现都由"grep -Po"代替了。

  1. # echo "1<p>2</p>3<p>4</p>5"|sed 's#<p>[0-9]</p>##g'
  2. 135

4. grep: "grep"真是个好东西,能实现php "preg_match_all"的功能,还支持"非贪婪模式",真是太好了:

  1. # echo "1<p>2</p>3<p>4</p>5" | grep -Po "<p>[0-9]</p>"
  2. <p>2</p>
  3. <p>4</p>


linux bash查询百度排名"rank.sh"脚本内容:

下面是bash百度排名查询脚本"rank.sh"的代码,你可以复制代码粘贴到linux系统中运行,也可以直接通过"wget http://www.aiezu.com/uploads/bash/rank.sh "下载脚本运行,记住要用"chmod a+x rank.sh"添加可执行权限才可运行哦~

  1. #!/bin/bash
  2. A="Mozilla/5.0" #user-agent
  3. cookies="/tmp/baiducookies"
  4. if [ -z "$1" ] || [ -z "$2" ]; then
  5.     echo "Useage: $0 DomainName Keyword";
  6.     echo "Example: $0 www.aiezu.com 爱E族";
  7.     exit
  8. fi
  9. #中文urlencode编码
  10. key=$(echo "$2" | tr -d '\n' | xxd -plain | sed 's/\(..\)/%\1/g');
  11. me=$1;
  12. #页码1-10页,每页100个查询结果,如果第一页未找到结果,自动找下一页
  13. for page in `seq 1 10`;
  14. do
  15.     d="wd=${key}&usm=1&ie=utf-8&rsv_page=1&rn=100";
  16.     if [ "$page" -gt "1" ]; then
  17.         let pn=(page-1)*100;
  18.         d="$d&pn=$pn";
  19.     fi
  20.     url="http://www.baidu.com/s";
  21.     r0=$(curl -c "$cookies" -b "$cookies" -d "$d" -G -A "$A" -e "$e" -# "$url"|tr '\n' ' '|sed 's#</\?b>##g');
  22.     r1=$(echo $r0|grep -Po '<table[^>]*id="[0-9]*"[^>]*>.*?</table>'|sed -n 's@.* id="\([0-9]*\)".*\(<span class="\(g\|c-showurl\)">\|<font size="-1" color="#008000">\)[ ]*\([^> /]*\).*@\1|\4@gp');
  23.     v=$(echo $r1|grep -Po "[^ ]*$me"|cut -d'|' -f2 | sort | uniq);
  24.     if ! [ -z "$v" ]; then
  25.         for domain in $v;
  26.         do
  27.             num=`echo $r1|grep -Po "[^ ]*$domain"|cut -d'|' -f1|tr '\n' ' '`;
  28.             echo -e "$domain\t$num";
  29.         done | sort -k 2 -n
  30.         exit
  31.     fi
  32. done
linux bash查询百度排名"rank.sh"脚本使用方法:

复制或者下载脚本到linux系统,然后:

  1. # chmod a+x rank.sh #添加可执行权限
  2. # ./rank.sh #查看用法
  3. Useage: ./rank.sh DomainName Keyword
  4. Example: ./rank.sh www.aiezu.com 爱E族
  5. # ./rank.sh qq.com 微博
  6. ######################################## 100.0%
  7. t.qq.com 2 11 13 14 17 35 36 44 45 48 53 81
  8. p.t.qq.com 17 31 #域名p.t.qq.com在查询关键"微博"时间在百度排在第17、31名
  9. dev.t.qq.com 35
  10. open.t.qq.com 36
  11. blog.qq.com 38
  12. www.qq.com 49
  13. t.auto.qq.com 56
  14. ent.qq.com 81
分类: Linux, SEO/SEM 标签: , , , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.