No Comments 作者:小项-怪物猪 分类:Python

python代码

  1. #!/usr/bin/python  
  2. #-*- coding:utf-8 -*-  
  3.   
  4.   
  5. # file1 与file2 对比,输出file2中没有的行.  
  6.   
  7.   
  8. """ 用法: xdiff file1 file2 difffile"""  
  9.   
  10. import re,sys,getopt;  
  11.   
  12. def xdiff(avg1,avg2,avg3):  
  13.     a = open(avg1,'r');  
  14.     mun = len(a.readlines());  
  15.     a.seek(0);  
  16.   
  17.     b = open(avg2,'r');  
  18.   
  19.     y = open(avg3,'w+');  
  20.     for x in range(1,mun):  
  21.         cvar = a.readline();  
  22.         avar = re.sub("\+"," ",cvar).split()[0];  
  23.         #avar = "zl-dev"  
  24.         c = re.findall(avar,b.read(),re.DOTALL);  
  25.         b.seek(0);  
  26.         z = [];  
  27.         if c[:1] == z:  
  28.             y.write(avar+'\n');  
  29.             print "Write",avar;  
  30.         else:  
  31.             pass;  
  32.             #print "Find",avar;  
  33.     y.close();  
  34.     a.seek(0);  
  35.   
  36. if __name__== "__main__":  
  37.     opts,argv = getopt.getopt(sys.argv[1:],'',['']);  
  38.   
  39.     xdiff(argv[0],argv[1],argv[2]);  

3 Comments 作者:小项-怪物猪 分类:Python

利用google 翻译写的python命令行翻译脚本

使用方法:请看下面的评论

学习知识点:    利用httplib 进行数据提交,并返回结果
复          习:    利用对jion split 进行 列表 字符串整理.

代码请看全文:


python代码

  1. #!/usr/bin/python  
  2. #-*-coding:utf-8-*-  
  3.   
  4. # 使用httplib进行post数据  
  5.   
  6. import httplib, urllib; #加载web通讯类模块  
  7. import sys,getopt; #加载获取命令行参数模块  
  8.   
  9. opts,argv = getopt.getopt(sys.argv[1:],'',['']); #获取命令行参数  
  10. c = " ";  
  11. argv = c.join(argv); #对参数进行整合 split 是对数据进行拆分  
  12. print "你输入的是:",argv;  
  13. params = urllib.urlencode({'sl':'en',  
  14.                            'tl':'zh-CN',  
  15.                            'text':argv,  
  16.                            'client':'t'}); #进行GET or POST的参数列表  
  17. headers = {"User-Agent""Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html)"#输出标头  
  18. conn = httplib.HTTPConnection("translate.google.cn"); #创建一个特定连接  
  19. conn.request("GET","/translate_a/t?" + params,headers=headers);  #发送数据请求  
  20. data = conn.getresponse();  #返回得到的数据结果  
  21. data1 = data.read(); # 读取返回结果  
  22. conn.close(); #关闭连接  
  23. print "翻译结果为:",data1; #输出翻译结果  

 

3 Comments 作者:小项-怪物猪 分类:Python

现在学习python 做为练手写了个网站内容采集脚本.

实现功能如下:

 

1.根据配置文件进行采集.
2.支持命令行参数 如: python corn.py --config=urls.ini
3.根据规则生成url列表集(只支持数字,能倒序采集).
4.根据规则获取列表页面特定位置,从而进一步分析缩小范围分析内容页面url.
5.将内容部分url存储到文件,每行一个url,并且在写入的时候进行判断是否已经存在相同url.
6.Bug太多,我慢慢完善.

使用方法:  ubuntu环境  终端运行 python xxx.py --config=xxx.ini

                windows环境 修改#!/usr/bin/python 为你的python.exe目录 在命令行运行 python xxx.py --config=xxx.ini

 

下面给出代码 保存成.py文件:


python代码

  1. #!/usr/bin/python  
  2. #-*-coding:utf-8-*-  
  3.   
  4. #  简单的蜘蛛采集程序  
  5. #  小项  
  6. #  2008-09-18  
  7.   
  8.   
  9. import sys;  
  10. import getopt;  
  11. import re;  
  12. import urllib;  
  13. import ConfigParser;  
  14. import time;  
  15. import MySQLdb as mysql;  
  16.   
  17.   
  18. if __name__ == "__main__":  
  19.   
  20.     try:  
  21.         opts,argv = getopt.getopt(sys.argv[1:],'c:',['config=']);  
  22.     except getopt.GetoptError:  
  23.         Help()  
  24.       
  25.     for keys,cut in opts:  
  26.         #if keys in ('-w','--write'):  
  27.         #    writefile()  
  28.         if keys in ('-c','--config'):  
  29.             cut  
  30.   
  31. try:  
  32.     conf = ConfigParser.ConfigParser();  
  33.     conf.readfp(open(cut));  
  34.   
  35. #==读取采集配置文件==#  
  36. #--urllibs--#  
  37.     starturl = conf.get("urllibs","starturl");  
  38.     startpage = int(conf.get("urllibs","startpage"));  
  39.     endpage = int(conf.get("urllibs","endpage"));  
  40.     urltemp = starturl + conf.get("urllibs","urltemp");  
  41.     filelist = conf.get("urllibs","urllist");  
  42.     dellist = conf.get("urllibs","dellist");  
  43. #--countcfg--#  
  44.     Stops = int(conf.get("countcfg","Stops"));  
  45.   
  46.     Divurl = conf.get("countcfg","Divurl");  
  47.     Urlls = conf.get("countcfg","Urlls");  
  48.   
  49.     Title = conf.get("countcfg","Title");  
  50.     Keywords = conf.get("countcfg","Keywords");  
  51.     Description = conf.get("countcfg","Description");  
  52.   
  53.   
  54.     url = [ urltemp % page for page in range(startpage,endpage) ];  
  55.     for url in url:  
  56.         urllist = urllib.urlopen(url).read(); #读取web文件  
  57.         urls = re.findall(Divurl,urllist); #获取指定的特定区域  
  58.     #将urls{属性为list}转换成str属性的以便于再次获取  
  59.         c = "";  
  60.         urls = c.join(urls);  
  61.         urlls = re.findall(Urlls,urls);  
  62.         urlfile = file(filelist,'r+a'); #打开文件进行追加数据  
  63.         outurl = urlfile.readlines();  
  64.       
  65.         for urlls in set(urlls):  
  66.         #==整理url并进行重复判断==#  
  67.             curls = urlls + "\n";  
  68.           
  69.             if curls in outurl:  #对找到的连接列表进行循环  
  70.                 print urlls + "页面重复跳过";  
  71.                 continue;  # break 是属于整个跳过,continue 是属于跳回去继续执行  
  72.             urlfile.write(urlls + '\n'); #循环输出  
  73.         urlfile.close(); #关闭文件  
  74.   
  75.     print "所有url列表获取完成,存入",filelist,"文件中";  
  76.   
  77.     time.sleep(Stops); #同样停顿一下  
  78.   
  79. #==每次读取列表文件的一行并且指针下移一行,这样可以循环获取每个列表.难题为如何获取整个文件的行数==#  
  80.     listurl = open(filelist,'r');  
  81.     mun = len(listurl.readlines())+1;  
  82.     listurl.seek(0); #指针跳会文件开头  
  83.   
  84.     #contents = open('contens.txt','a');  
  85.     User = 'root';  
  86.     Passwd = '970207';  
  87.     Host = 'localhost';  
  88.     Db = 'testcorn';  
  89.     contents = mysql.connect(user=User,passwd=Passwd,host=Host,db=Db).cursor();  
  90.       
  91.   
  92. #==进行内容循环输出==#  
  93.     for conurl in range(1,mun):  
  94.   
  95.         curl = listurl.readline();  
  96.     #okurl = r'http://www.510buy.com/yewu/5662.html';  
  97.     #print okurl;  
  98.       
  99.         time.sleep(Stops); #停顿一下,免得被封,or超时 进行下一次采集  
  100.          
  101.         content = urllib.urlopen(starturl + curl).read(); #读取url  
  102.   
  103.         title = re.findall(Title,content); #找到标题  
  104.       
  105.         keywords = re.findall(Keywords,content); #找到关键词  
  106.       
  107.         description = re.findall(Description,content); #找到描述  
  108.       
  109.         for title,keywords,description in zip(set(title),set(keywords),set(description)):  
  110.         #print title;  #测试查看输出结果  
  111.             #contents.write('[Title:]' + title + '\n');  
  112.             #contents.write('[Keyword:]' + keywords + '\n');  
  113.             #contents.write('[Description:]' + description + '\n\n');  
  114.             #values = "(" + "\"" + title + "\"","\"" + keywords + "\"","\"" + description + "\"" + ")"  
  115.             #contents.execute("INSERT INTO `counts` (`title` ,`keywords` ,`description`) VALUES (%s, %s, %s);",values);  
  116.             #title = title.encode(title,"utf=8")  
  117.             print "写入",title,"成功!","停顿",Stops,"秒进行下一次采集";  
  118.     contents.close();  
  119.   
  120. except KeyboardInterrupt:  
  121.     print "用户终止";  

下面是ini的配置文件 保存成.ini文件:


Ini配置文件代码

  1. [urllibs]  
  2. #目标网址  
  3. starturl = http://www.510buy.com  
  4. #列表开始页码  
  5. startpage = 2  
  6. #列表结束页码  
  7. endpage = 3  
  8. #列表部分代码  
  9. urltemp = /yewu/list_%d.html  
  10. #存储url列表文件路径  
  11. urllist = /home/buysz/桌面/urllist.ini  
  12. #剔除不需要的url列表,中间用,隔开  
  13. dellist = http://www.510buy.com,http://www.510buy.com" target="_blank,/yewu/index.html,http://www.510buy.com/  
  14.   
  15. [countcfg]  
  16. #采集停顿秒数  
  17. Stops = 1  
  18. #采集特定位置url规则  
  19. Divurl = <div.*?>(.*?)<\/div>  
  20. #采集url的正则  
  21. Urlls = <a href=[\"|\'](.*?)[\"\']>  
  22.   
  23. #标题正则  
  24. Title = <title>(.*?) - .*?</title>  
  25. #关键词正则  
  26. Keywords = name=\"keywords\" content=\"(.*?)\">  
  27. #页面描述正则  
  28. Description = name=\"description\" content=\"(.*?)\">  

 

No Comments 作者:小项-怪物猪 分类:FreeBSD

  1. #!/bin/sh
  2. #filename cn_isp.sh;auto get the IP of CHINANET and CNC;
  3. rm delegated-apnic-latest
  4. rm cnnet
  5. rm IP_CHINANET
  6. rm IP_UNICOM
  7. rm IP_CNC
  8. fetch http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest
  9. grep 'CN|ipv4'delegated-apnic-latest|cut-f4,5-d'|'|tr'|'''>>cnnet
  10. cat cnnet|whilereadipcnt
  11. do
  12. mask=$(bc< <END|tail-1
  13. pow=32;
  14. define log2(x){
  15. if (x<=1)return(pow);
  16. pow--;
  17. return(log2(x/2));
  18. }
  19. log2($cnt);
  20. END
  21. )
  22.  
  23. resultext=`whois-A$ip|grep-e^netname-e^descr-e^role|cut-f 2-d':'|sed's/ *//'`
  24. echo '................Search for'$ip/$mask'.........................'
  25.  
  26. if echo$resultext|grep-i-e'chinanet'-e'chinatel'-e'china telecom'
  27.  then echo$ip/$mask>>IP_CHINANET
  28. fi
  29.  
  30. if echo$resultext|grep-i-e'unicom'
  31.  then echo$ip/$mask>>IP_UNICOM
  32. fi
  33.  
  34. if echo$resultext|grep-i-e'cncgroup'
  35.  then echo$ip/$mask>>IP_CNC
  36. fi
  37.  
  38. echo '----------------------------------------------'
  39. echo ''
  40.  
  41. done

再利用 ccpp0@DRL 写的执行脚本,就可以把网通/电信等IP列表写出路由表中


  1. #!/bin/sh
  2. #write By ccpp0
  3.  
  4. DEFAULTGW=`/usr/bin/grep defaultrouter/etc/rc.conf| /usr/bin/sed"s/[^0-9\.]//g"`
  5. #CNCGW=60.28.32.49
  6. #CNCIP=/root/cn_isp/IP_CNC
  7. CHINANETGW=221.239.1.193
  8. CHINANETIP=/root/cn_isp/IP_CHINANET
  9.  
  10. /sbin/route flush
  11. /sbin/route adddefault${DEFAULTGW}
  12. #for RL in `/bin/cat ${CNCIP}`; do
  13. #        /sbin/route add -net ${RL} ${CNCGW}
  14. #done
  15.  
  16. for RLin`/bin/cat${CHINANETIP}`;do
  17.         /sbin/route add-net${RL} ${CHINANETGW}
  18. done

Update:
稍微修正一下,没有必要把所有的网通/电信网段都加进路由表