取某一域下面的域名
时间:2008-01-15 来源:CUDev
好久不写shell了,今天爽了一把。本来是要写一个爬虫,爬cs.hit.edu.cn的域下面的域名(这里隐去原先的域)。
本来是自己写了一个爬虫,发现效率和稳定性不行,只好还一种思路,想起了google和baidu,用它搜索site:cs.hit.edu.cn就能够查询出很多的站点,从中匹配出来再去重,OK!Let's Go!
需要进行去非法化,去重:
这样的话,就不用自己写爬虫了,只需要baidu或者是google的查询结果就可以了。
问题:不停的去查询将会导致baidu或者是google封锁我们。需要加上延迟。
要么加上sleep 5
或者是
wget -w 20 --random-wait
也可以使用代理来做。
发现,google和baidu在即使使用了延时之后,再访问多了之后,还是被封,所以,我有加上了一些trick。
判断新下载的文件跟上一个下载的文件是否一致;如果一致就说明,已经出现了重复情况,退出程序,返回当前的起始值,再次以新的起始值运行程序。
本来是自己写了一个爬虫,发现效率和稳定性不行,只好还一种思路,想起了google和baidu,用它搜索site:cs.hit.edu.cn就能够查询出很多的站点,从中匹配出来再去重,OK!Let's Go!
#/bin/sh #Using baidu.com Search #site:gov.cn URL="http://www.baidu.com/s?tn=baiduadv&q1=site%3Acs.hit.edu.cn&rn=100&" #index.html site:(gov.cn) #URL="http://www.baidu.com/s?tn=baiduadv&q1=index.html&q2=&q3=&q4=&rn=100&lm=0&ct=1&ft=&q5=&q6=cs.hit.edu.cn&" 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。
判断新下载的文件跟上一个下载的文件是否一致;如果一致就说明,已经出现了重复情况,退出程序,返回当前的起始值,再次以新的起始值运行程序。
相关阅读 更多 +