ウェイスト·ランド

ようこそ私の廃土ヘ。

GUNPLA HOBBY | Core Gamer | Individual Sports Fan | Han Shot First | Computer Science


Hi, welcome to KhaosZen's bitter space. Now is learning pixel art in progress.

利用Python处理JIRA平台数据的两种方法

在公司实习期间收到一个小任务要求从公司内部的JIRA平台上抓取一些信息并且做一些处理。

以下是两种抓取方式:

方法一:爬虫

模拟登录:

首先在浏览器中打开相关的JIRA的登录页面,使用浏览器的inspect功能查看Network标签。可以在login.jsp的Headers标签找到登录所需要的Form Data。我们公司的是这样的格式的(所有JIRA的登录都大同小异):

os_username: # 登录用户名
os_password: # 登录密码
os_destination: 
user_role: 
atl_token: 
login: Log In

于是就利用urllib的urlencode来记录这些数据:

# POST data
postdata = urllib.urlencode({
	'os_username' : usrname,
	'os_password' : pwd,
	'os_cookie' : 'true',
	'os_destination' : '',
	'user_role' : '',
	'atl_token' : '',
	'login' : 'Log In',
	})

用户名可以选择用raw_input()函数来获取,密码可以用Python的getpass包的getpass.getpass()来解决。当然,如果这个程序只是自己使用直接在程序里写入就可以了。

所以具体的登录操作如下:

import urllib
import urllib2
import cookielib

# Get username and password from input
usrname = raw_input("Username:")
pwd = getpass.getpass("Password:")

# POST data,这里具体填什么根据之前inspect查到的
postdata = urllib.urlencode({
	'os_username' : usrname,
	'os_password' : pwd,
	'os_cookie' : 'true',
	'os_destination' : '',
	'user_role' : '',
	'atl_token' : '',
	'login' : 'Log In',
	})

# Initialize a CookieJar to handle Cookie message
cookie = cookielib.CookieJar()

# Initialize a new opener to make use of the CookieJar
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

# Initialize a request
req = urllib2.Request(
	url = '登录JIRA的URL',
	data = postdata
	)

# Access the login url
res = opener.open(req)

if res.code == 200:
    print("Login success!")

如果res的code值为200就说明登录成功啦!接下来就能根据工单号来做数据分析了。

数据分析:

数据分析主要方法是打开网页源代码,查看需要的元素,使用正则表达式筛选处理数据后输出。

这里主要使用了re这个包来处理数据。但是由于本人正则表达式学的并不是很好,所以这里就不过多赘述了。

给个学习正则表达式的链接,希望能够有所帮助。

如果想要记录下分析的数据,可以使用csv这个包,把数据写入csv文件后利用Microsoft Excel进行进一步处理和分析。

爬虫法总结:

爬虫法是一个比较麻烦的方法,由于获取数据的方式比较原始,所以需要比较高的学习成本来解决数据分析的问题,并且由于不同网站的数据存在差异,所以需要人工的(查看网页源码)进行数据排查。但是爬虫法一旦熟练,所有类型的网站的数据分析都会比较容易上手,并且学习爬虫法的同时也能对正则表达式有更好的了解。

方法二:JIRA API

爬虫法以后,我发现利用正则表达查找数据实在是太麻烦,于是继续寻求解决方案。

最后发现JIRA方面其实是提供了一个名为jira的库的,这样一来,事情就方便多了。

先上两个文档的链接:JIRA APIPython JIRA

接下来是一些步骤:

安装:

安装很简单,在terminal用pip安装就好:

pip install jira

使用账号密码登录:

和爬虫法类似,用户名密码可以利用raw_input()getpass.getpass()输入解决或者自行定义变量:

# Login setup
jira_server = 'JIRA的URL'
jira_username = raw_input('Username:')
jira_password = getpass.getpass('Password:')

# Establish JIRA connection
myjira = JIRA(jira_server,basic_auth=(jira_username,jira_password))

利用JIRA Query Language(JQL)筛选想要查询的issue。JQL的表达可以看链接,也可以在JIRA的Search for issues上筛选后点击advance后复制相应的JQL表达式进行筛选。

issues = myjira.search_issues('JQL表达式放这',maxResults = 200000)# maxResults是最多的issue的数量,根据自己需求填写。

接下来对于筛选下来的数据,根据JIRA API的成员的访问方式进行调取、分析和输出即可。

参考

最近的文章

【翻译】文化冲突:为什么Arena of Valor(《王者荣耀》海外版)在美国步履维艰?

声明本文原文来自GameIndustry.biz,仅作为本人的翻译和研究练习,转载请注明原文地址并联系版权所有方。原作者为Jeff Sue。正文毫无疑问,腾讯的《王者荣耀》是当前世界上最大牌的移动游戏。在2017年,移动MOBA(多人在线战斗竞技场)游戏制造了19亿美元的盈利。仅在中国大陆就产生了2亿数量的活跃玩家。《王者荣耀》这一移动MOBA成为了新兴电竞的焦点并在这个领域首创了《王者荣耀》职业联赛(KPL)。在去年的7月,政府被这一游戏热潮冲击而产生的影响一度要求腾讯加大对《王者荣耀》...…

游戏产业继续阅读
更早的文章

FABO X Final Project

Final Project: Password Instrumental AlarmDescriptionThis final project will combine as much knowledges I have learnt as possible to show the completeness of the learning of this course.Firstly I will implement an alarm clock which can play music ...…

FABO-X继续阅读