抓取 网站 代理 ip

#!/bin/sh
BASEDIR=~/shell
url_config="ip.conf"
http_host="http://www.sooip.cn/"
curl_timeout=15
one_url_file="allurl.txt"
ip_url_file="ip_url_file"
save_tmps_path="tmps"
ip_fenge_path="ip_path"
fenge_line=4000
ip_files_tmp="ip_files_tmp"
ip_files_contnet="ip_files_contnet"


#验证内容是否存在于传入的文件里.
#$1 需要查询的内容
#$2 文本文件
function verify_exist(){
  cat $2 | grep -q "$1";
  if [ $? -eq 0 ];
  then
    return 1;
  else
    return 0;
  fi;
}
#处理代理ip网站所有的url,保存到一个临时文件里
function handle_url_one(){
  i=2;
  while [ 1 ];
  do
    if [ $i==2 ];
  then
    curl_http_url=${http_host}$1/;
  one_url=$curl_http_url""index.html; 
  verify_exist $one_url $one_url_file
    if [ $? -eq 0 ];
  then
    echo $one_url >> $one_url_file;
  fi;
  fi;
  one_url_other=$curl_http_url""index_$i.html;
  url_result=`curl -s $one_url_other`;
#对循环的url做判断,如果发现内容包含404就跳出该循环,进入下个模块的查询
  echo "$url_result" | grep -q "404 Not Found";
  if [ $? -eq 0 ];
  then
    break;
  fi;
#对需要处理的url进行查询,如果存在临时文件内,就放弃处理
  verify_exist $one_url_other $one_url_file;
  if [ $? -eq 0 ];
  then
#如果判断不存在,就写入到临时文件内
    echo $one_url_other >> $one_url_file;
  fi;
  i=`expr $i + 1`;
  done;
}
#处理上个函数解析出来的url,这里处理的url是包含有IP地址的url
#$1 需要处理的url
function handle_url_two(){
  tmp=`echo "$1" | awk -F '/' '{print $NF}'` #对url做处理,得到最后一个值.
    find_tmp=`echo "$1" | awk -F '/' '{size=NF-1}{print $size}'` #还是对url做处理.得到该url属于那个模块下
    page_content=$save_tmps_path"/"$find_tmp"_"$tmp #拼接临时文件的存放的位置
    curl -s --connect-timeout $curl_timeout $1 | iconv -f gb2312 -t utf-8 > $page_content #iconv -f gb2312 -t utf-8 用这个处理抓取的网页因为是gb2312的所以需要做下字符转换.把抓取的文件保存在临时文件内.
    awk '{if($0~/'$find_tmp'/) {print $0}}' $page_content | awk -F '[<>]' '{for(i=1;i<NF;i++)if($i~/'$find_tmp'/) { print $i} }' | awk -F '["""]'  '{if(NF>3 && $2~/'$find_tmp'/){print $2}}' >> "two_url_tmp" #通过3次的awk处理.从上面抓取的url文件里,获得保存ip地址的网址
}

function handle_url_three(){
  ip_url_all_path=$http_host$1
    page_content="html_file_tmp" 
    curl -s --connect-timeout $curl_timeout $ip_url_all_path | iconv -f gb2312 -t utf-8 > $page_content #iconv -f gb2312 -t utf-8               用这个处理抓取的网页因为是gb2312的所以需要做下字符转换.把抓取的文件保存在临时文件内.
   cat $page_content | grep '[0-9]\{3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | awk -F ' ' '{ for(i=1;i<NF;i++) if($i~/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ && $i+1~/[0-9]/) {print $i,$(i+1)}}' >> $ip_files_tmp 
}

#处理第一层的url
for i in `cat $url_config` 
  do
  echo $i;
#handle_url_one $i
done
#判断存放临时文件的文件夹是否存在,不存在则创建,并且对权限做控制
if [ ! -d $save_tmps_path ]; then 
  mkdir -m 770 $save_tmps_path
fi
if [ ! -f $ip_url_file ];then
  #处理二级url
  for i in `cat $one_url_file` 
    do
    handle_url_two $i 
    sleep 1;
  done
  sort -n  "two_url_tmp" | uniq > $ip_url_file
  rm -rf "two_url_tmp" $save_tmps_path
fi
if [ ! -f $ip_files_tmp ]
then
  for i in `cat $ip_url_file`
  do
   handle_url_three $i
  done
fi
if [ ! -d $ip_fenge_path ]; then 
  mkdir -m 770 $ip_fenge_path 
fi

sort -n $ip_files_tmp | uniq > $ip_files_contnet 

split -l $fenge_line $ip_files_contnet $ip_fenge_path"/"

ls $ip_fenge_path | while read line
do
$BASEDIR/pingip.sh $line >> /dev/null &
done

文件2

pingip.sh

#!/bin/sh
ip_fenge_path="ip_path"
files=$ip_fenge_path"/"$1

cat $files | while read line
do
nc -z -w 1 -u $line > /dev/null 2>&1
if [  $? -eq 0 ];
then
  echo $line | sed -e 's/\ /:/' >> "ok_ip"
fi
done

ip.conf
izuixindaili
QQdailiIP
guoneidaili
guowaidaili
youxidaili
socksdaili
diqudaili
dailiziyuan
dailizhuanlan


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值