今天我想给大家分享几个python脚本,分别是:
1.公司访问外网认证脚本(最初有同事写过,我优化了一下)。
2.统计周报系统所有同事的最近一篇周报。
3.统计测试技术分享里指定一个月所有同事的文章数量。
4.统计bugzilla系统里所有的quips。
这几个小脚本都是利用空闲时间,经过多次修改完成的。技术含量也不是特别高,主要是学以致用,因为光说不练假把式,只有在实践当中才能够真正的掌握知识点。实践是检验真理的唯一标准。
一、公司访问外网认证
在公司访问外网得需要认证,有时候不一定能够接触到浏览器,所以利用脚本认证上网还是很方便的。
优化功能:
1. 登录成功会有提示信息
2. 登录失败也会有提示信息,就是说可以捕捉异常
3. 有时候输入中文名字不方便,所以可以把名字提前输入脚本
4. 输入密码屏幕不可见,先前同事写的脚本是明文密码
源码:
#!/usr/bin/env python
#coding:utf-8
####################
#公司访问外网认证脚本
#update by kai.liang@i-soft.com.cn
###################
import urllib, urllib2, getpass
#name = raw_input('请输入用户名:')
name = '梁凯' # 在本行输入您的名字
url = 'http://172.16.1.3/webAuth/index.htm'
def auth():
page = 0
parameters = {'password':passwd,'pwd':passwd,'secret':'true','username':name}
#提交的数据参数
data = urllib.urlencode(parameters) #对参数进行编码
req = urllib2.Request(url, data) #形成url请求
try:
response = urllib2.urlopen(req) #发送请求
response = urllib2.urlopen(req) #发送请求
page = response.read() #读取返回的页面
except Exception, e:
print '登录失败,请重新登录!' #修复HTTPError错误
if page:
if "认证成功" in page or "该IP已登录" in page:
print '恭喜您,登录成功,您现在可以访问外网了!'
else:
print '账号或密码错误,请重新登录!'
if __name__ == '__main__':
print "####################################"
print "#公司访问外网认证脚本 #"
print "#初次使用请将脚本12行替换为您的名字#"
print "####################################"
print '用户名:%s' %name
passwd = getpass.getpass('请输入密码:')
auth()
二、统计周报系统所有同事的最近一篇周报
本脚本可以把所有同事最近发布的一篇周报标题给抓取出来,这样可以知道哪些同事有没有更新周报了,嘿嘿。
这其实属于爬虫类型的脚本,使用urllib2模块抓取特定网页,然后使用re正则表达式模块进行过滤字符,把需要的信息给抓取出来。利用爬虫还可以批量下载图片。
上源码:
#!/usr/bin/python
#coding:utf-8
####################
#本文档爬取周报系统所有同事的最近一篇周报
#powered by: kai.liang@i-soft.com.cn
#date:20170224
#version:1.0
######################
import urllib2
import re #载入所需模块
class Bloglist():
url='http://tfs.i-soft.com.cn/drupal/?q=blog/' #周报系统日志网址的前缀
def __init__(self, userid):
self.url=Bloglist.url+str(userid) #网址=网址前缀+用户id
def getHtml(self): #获取网页内容
try:
html = urllib2.urlopen(self.url).read()
return html
except Exception, e:
print 'url error!!'
def getTitle(self): #应用正则表达式提取网页中的日志标题
html=self.getHtml()
reg = r'node/\d+">(.*\d{6}.*)'
titlere = re.compile(reg)
lines = html.split()
m = re.search(titlere, html)
titles = m.groups()
title = ''.join(titles)
return title
def main():
"""
zhaopanpan:7
lixiaoshuang:21
huangjun:22
wangjue:23
liuke:24
lipeng:28
hanjingjing:30
lixingfeng:41
liuhui:42
liangkai:43
liulu:44
zhaolili:45
yaoxiangchuang:46
liuchang:47
liuchunyuan:48
lufei:49
liuyang:50
chijianping:51
""" #每位用户的id
users = [7,21,22,23,24,28,30,41,42,43,44,45,46,47,48,49,50,51]
print '----------------------------'
print '测试中心成员最近一篇周报'
print '----------------------------'
for i in users:
userBlog = Bloglist(i) #对象初始化
title = userBlog.getTitle() #使用对象方法
print title
print '----------------------------'
if __name__== '__main__':
main()
使用方法:./weekpaper-spider.py
[root@server49 pytest_20170309]# ./weekpaper-spider.py ---------------------------- 测试中心成员最近一篇周报 ---------------------------- 测试个人周报20170331-赵盼盼 测试个人周报-20170331-李小双 测试个人周报-20170331-黄俊 测试个人周报-20170331-王珏 测试个人周报-20170331-刘柯 测试个人周报20170331-李鹏 测试个人周报20170331-韩晶晶 测试个人周报20170331-李兴峰 测试个人周报-20170331-刘辉 测试个人周报-20170331-梁凯 测试个人周报-20170331-刘璐 测试个人周报-20170331-赵丽丽 测试个人周报-20170331-姚翔川 测试个人周报-20170331-刘畅 测试个人周报-20170331-刘春媛 测试个人周报20170331-路斐 测试个人周报-20170407-刘杨 测试个人周报-20170331-迟健平 ----------------------------
三、统计测试技术分享里指定一个月所有同事的文章数量
本脚本可以统计测试技术分享里指定一个月所有同事的文章数量,包括每位同事发布文章数量,转载和原创各自数量。还有总文章数量以及总转载和总原创数量。辨别是不是转载主要是看标题有没有“转载”或“转”的关键词,如果同事不写这个关键词的话只能认为是原创了。
最开始可以显示作者标题,看着乱我给去掉了。现在是直接屏幕输出,其实可以写入文本文件,或者制作成excel文件,当然得使用第三方模块才可以。
源码:
#!/usr/bin/python
#coding:utf-8
##################
#爬取测试技术分享里指定某一月所有同事的文章发布数量
#powered by: kai.liang@i-soft.com.cn
#date: 20170307
#version: 1.0
#################
import urllib2
import re
import sys #载入网络、正则、系统的模块
try:
month = sys.argv[1] #运行脚本时传递的参数
except Exception as e:
print '请输入参数,例如:'
print '查询3月份的文章请输入:python blog-spider.py 03'
exit()
year = 2017 #默认年份为2017,可以此处修改
class Bloglist(): #定义类,脚本的核心
total_zhuan=0
total_yuan=0
total = 0
urlHead = 'http://192.168.32.3/blog/?author=%s&&m=%s'
def __init__(self, author, date='201703'): #初始化参数
self.url = self.urlHead %(author,date)
self.zhuan = 0
self.yuan = 0
def getHtml(self): #获取网页文本
html = urllib2.urlopen(self.url).read()
return html
def getTitle(self): #获取网页中某一作者的文章标题
reg = r'"bookmark">(.*)'
titlere = re.compile(reg)
title = re.findall(titlere, self.getHtml())
return title
def count(self): #计算作者的文章数量,本打算输出文章标题
#看着乱,就给注释掉了
#print "文章标题:"
#print "-----------------------------"
for line in self.getTitle():
# if '转载' or '(转)' in line:
if '转载' in line or line[0:9]== '(转)':
self.zhuan += 1
else:
self.yuan += 1
#print line
#print "-----------------------------"
print "发布文章:" + str(self.zhuan+self.yuan) + "篇 ",
print "转载:"+ str(self.zhuan) + "篇 " + "原创:" + str(self.yuan) + "篇"
Bloglist.total_zhuan = Bloglist.total_zhuan + self.zhuan
Bloglist.total_yuan = Bloglist.total_yuan + self.yuan
Bloglist.total = Bloglist.total_zhuan + Bloglist.total_yuan
def author():
date = str(year) + str(month)
user = {2:'李 鹏', 3:'王 珏', 5:'黄 俊',6:'韩晶晶', 7:'李小双', 8:'赵盼盼', \
10:'刘 珂',11:'刘 辉', 12:'刘春媛', 13:'路 斐', 14:'梁 凯', 15:'李兴峰', 16:'刘 璐',\
17:'姚翔川',18:'刘 畅', 19:'刘 杨', 20:'赵丽丽', 21:'迟建平'}
#测试成员对应的id
print "-------------------------------------------"
print "2017年%s月份测试中心成员发布文章情况" %month
print "-------------------------------------------"
for i in user.keys():
userPaper = Bloglist(i, date) #成员对象的实例化
print '%s' %user[i],
userPaper.count()
print "总计:%s篇,转载:%s篇,原创:%s篇" %(Bloglist.total, Bloglist.total_zhuan, Bloglist.total_yuan)
print "-------------------------------------------"
if __name__ == '__main__':
author()
使用方法:
./blog-spider.py 03 脚本后面加入月份,默认是年份是2017。
[root@server49 pytest_20170309]# ./blog-spider.py 03 ------------------------------------------- 2017年03月份测试中心成员发布文章情况 ------------------------------------------- 李 鹏 发布文章:3篇 转载:1篇 原创:2篇 王 珏 发布文章:2篇 转载:0篇 原创:2篇 黄 俊 发布文章:2篇 转载:1篇 原创:1篇 韩晶晶 发布文章:2篇 转载:1篇 原创:1篇 李小双 发布文章:1篇 转载:0篇 原创:1篇 赵盼盼 发布文章:3篇 转载:2篇 原创:1篇 刘 珂 发布文章:3篇 转载:0篇 原创:3篇 刘 辉 发布文章:3篇 转载:2篇 原创:1篇 刘春媛 发布文章:3篇 转载:2篇 原创:1篇 路 斐 发布文章:2篇 转载:1篇 原创:1篇 梁 凯 发布文章:3篇 转载:2篇 原创:1篇 李兴峰 发布文章:3篇 转载:1篇 原创:2篇 刘 璐 发布文章:3篇 转载:2篇 原创:1篇 姚翔川 发布文章:3篇 转载:2篇 原创:1篇 刘 畅 发布文章:3篇 转载:2篇 原创:1篇 刘 杨 发布文章:3篇 转载:2篇 原创:1篇 赵丽丽 发布文章:3篇 转载:1篇 原创:2篇 迟建平 发布文章:3篇 转载:2篇 原创:1篇 总计:48篇,转载:24篇,原创:24篇 -------------------------------------------
四、统计bugzilla系统里所有的quips
大家访问bugzilla时会看到很多好玩的句子,可是你有没有想过一共有多少个quips呢,如果是都抓取下来该如何去做呢?好,大家先不要参考下面的代码,自己去写写,然后跟我的对比一下,看看你到底比我强多少。
此处需等待10分钟……………………………………
好,相信大家都写完了。我们来分析一下,首先应该使用一个可以看到quips的地址,这个地址bug数量越少越好,减少载入时间呀。然后把所以网页内容抓取下来,分析quips的关键词,使用re模块的正则表达式过滤quips。因为每次显示的quips都是随机的,所以你得抓取足够多的次数才可以遍历整个quips的数据库,而且还会有重复,你得把重复的去掉。我选择获取100次quips,执行一遍可能不能遍历所有的数据,得运行几遍才可以。
我得到的结果是一共含有48个quips。
上源码:
#!/usr/bin/python
#coding:utf-8
import urllib2
import re
import os
#查看quips所使用的网址
url = "http://192.168.32.3/buglist.cgi?query_format=advanced&list_id=81057&short_desc=123&short_desc_type=allwordssubstr&product=smb_DEV"
def getquip():
html = urllib2.urlopen(url).read() #读取网页内容
rules = r'"quips.cgi">(.*)'
reg = re.compile(rules)
quip = re.findall(reg,html) #使用正则表达式提取quips字符
quip = ''.join(quip)
#print quip
q = open('quips.txt', 'r+')
quips = q.read()
q.close() #读取文件内容
if quip not in quips: #如果获取的quip不在quips.txt文件里则写入文件
f = open('quips.txt', 'a')
f.write(quip)
f.write('\n')
f.close()
def isquips():
if not os.path.isfile('quips.txt'):
a = os.system('touch quips.txt') #判断quips.txt是否存在,不存在就创建
if __name__ == "__main__":
print "Getting quips, please waiting....."
isquips()
for i in range(100): #获取100个quips
getquip()
print "Getting quips completed, please look over the quips.txt."
使用方法:./bugQuips.py
[root@server49 pytest_20170309]# ./bugQuips.py Getting quips, please waiting..... Getting quips completed, please look over the quips.txt.
[root@server49 pytest]# cat quips.txt 水深火热~ 骂程序员职业的人大都自己就是程序员。因为高水平的人不屑于骂,低水平的人不知道怎么骂 ……于浩歌狂热之际中寒;于天上看见深渊。于一切眼中看见无所有;于无所希望中得救。…… 质量即生命,责任重泰山 程序员都是好男人,因为他们一整天都在扪心自问:我到底错在哪了,让我知道,我一定改... Fear can hold you prisoner. Hope can set you free. 再见,罗纳尔多! 过少的测试是一种不负责任,过多的测试是一种犯罪! 你是我们加班的罪魁祸首,坚决消灭你!!!!!!!!!! 很多程序员不知道格子衫有一个隐藏属性:穿上后遇到BUG的概率减少5%! 问君能有几多愁,恰似调完bug改需求!!! 平均每三个“屌丝”拥有一个女友(男友) 我们有理由相信计算机的世界没有诡异的事情,一定是自己犯了某个傻X的错误 "hello world" 就是罪魁祸首。不编程,何来bug!?!? 原谅我一生不羁放纵爱自由 若是黄艺博不娶林妙可,我就再也不相信爱情了…… 一切罪恶BUG的根源都是“Hello,word!” 一切Bug都是纸老虎!你强他就弱!你弱他就强!在战略上藐视bug,在战术上重视bug!有木有? 北京人说,推开窗,咱就能闻到烟。上海人讲,这有啥,呵呵,打开自来水,咱就能喝到排骨汤。 所有的程序都有逻辑,所有的事物都有因果。 人生一梦,白云苍狗 the quieter you become,the more you are able to hear 爱他,就给他提bug;恨他,也给他提bug 神马bug,都是浮云 国家项目是学术腐败之源! 抗bug战争,漫长而艰难 谁也无法改变现状,唯有无数程序员血洒大地,才能使项目重建天日~ Jobs教主去了,改变世界的事就交给我们吧 ^如今但愿关门睡,一任梅花任雪飞^ 你若不离不弃,我必死无疑 人生三恨:一恨海棠无香,二恨鲥鱼多刺,三恨红楼梦未完 轻轻地我走了,正如我悄悄的来;我挥一挥衣袖,fix一片bug…… 你若安好,便是晴天。 人生如梦亦如幻,朝如晨露暮如霞。 一个程序员看到bug后,如果第一反应是,这是硬件、库的问题,那么说看程序员入门 片云归洞非有意,我造Bug本无心 恨你在心口难开 满纸心酸泪。 不管你有多少经验,BUG一直跟着你 生命不息,测试不止 天下风云出我辈,一入江湖岁月催 成也bug,败也bug 皇图霸业谈笑中,不胜人生一场醉 不生不灭,不垢不净,不增不减 未来姗姗来迟,现在如箭飞逝 知识就是力量,一种让别人觉得自己很笨的力量。。。。 菩提本无树,明镜亦非台,本来无一物,何处惹尘埃。 道,生一一,生二二,生三三,生万物万物,附阴而抱阳,冲气以为和。
结语
直接复制网页的源码由于格式问题可能不能执行,建议wordpress上装个代码高亮显示的插件,那样查看代码就方便了。需要的童鞋去github上下载吧。
纸上得来终觉浅,觉知此事要躬行。看十行代码不如实实在在的敲一行代码。当你敲出来时才可以发现一些细节问题,才可以体会代码的精妙之处。很多同学都在学习编程,我认为还是应该多把书上的代码自己敲一遍,可能的话把学到的知识用于解决工作和生活中的问题。毕竟技术可以改变生活。学习——工作——再学习——再工作——能力提升。
“Life is short, you need python”