by 梁凯
今天我想给大家分享几个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”