Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5760660
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类:

2008-01-15 18:02:57

好久不写shell了,今天爽了一把。本来是要写一个爬虫,爬cs.hit.edu.cn的域下面的域名(这里隐去原先的域)。

本来是自己写了一个爬虫,发现效率和稳定性不行,只好还一种思路,想起了google和baidu,用它搜索site:cs.hit.edu.cn就能够查询出很多的站点,从中匹配出来再去重,OK!Let's Go!

#/bin/sh
#Using baidu.com Search

#site:gov.cn
URL="%3Acs.hit.edu.cn&rn=100&"

#index.html site:(gov.cn)
#URL=""

a=0
if [ ! -z $1 ];then
        a=$1
fi

while true
do
        mv -f baidu.html baidu.html.bak

        wget -O baidu.html -w 5 --random-wait $URL"pn="$a

        if [ -f baidu.html.bak ];then
                diff baidu.html baidu.html.bak > /dev/null
                if [ $? -eq 0 ];then
                        echo "a="$a
                        echo "Rerun the shell:"
                        echo "$./1.sh "$a
                        exit
                fi
        fi

        html2text baidu.html  | grep ".gov.cn/" | cut -f1 -d '/' >> host-baidu.txt
        a=$(( $a+100 ))
        sleep 1
done


需要进行去非法化,去重:
#!/bin/sh


grep -E "gov.cn$" host-baidu.txt > host-baidu.tmp
sort host-baidu.tmp|uniq > baidu-result.txt
rm -f host-baidu.tmp baidu.html

echo "###################################"
echo "   Result In baidu-result.txt"
echo "###################################"

这样的话,就不用自己写爬虫了,只需要baidu或者是google的查询结果就可以了。

问题:不停的去查询将会导致baidu或者是google封锁我们。需要加上延迟。
要么加上sleep 5
或者是
wget -w 20 --random-wait
也可以使用代理来做。

发现,google和baidu在即使使用了延时之后,再访问多了之后,还是被封,所以,我有加上了一些trick。
判断新下载的文件跟上一个下载的文件是否一致;如果一致就说明,已经出现了重复情况,退出程序,返回当前的起始值,再次以新的起始值运行程序。

阅读(1735) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~