当前位置:   article > 正文

python通过confluence api查询包含指定内容的文章_python confluence api

python confluence api

前言:

本篇文章主要是分享如何通过python脚本来实现爬取confluence上的内容,来找到包含指定内容的页面。
(网上找了一圈也没有合适的内容,因此分享一下自己研究成功的代码)

我这个脚本主要就是为了排查confluence上是否有人将账号密码明文放在文章中
具体逻辑不详细介绍了,网上有很多,相关注意事项都写在了代码中了

'''
writer by fly夏天
'''
import requests,openpyxl
import json

next = ""
loop =2
#遍历查询
def search(next):
    if next == "":
        url = "url/rest/api/content/search" 
        #这里的url需要替换成自己的confluence地址
        #官方上写的路由很乱,实际上对内容搜索需要调用/rest/api/content/search这个api

        headers = {
        "Accept": "application/json",
        "Cookie":"JSESSIONID=JSESSIONID"
        #官网上给了好几种认证方式,我实测中都没有成功,还是这个靠谱,直接浏览器登录用生成的cookie来操作,授权上肯定是没问题
        #请注意,如果你的代码正常运行没有错误产生,但无法搜索到结果,请检查此处的cookie授权是否有问题
        }
        query = {
        'cql': '{text~"密码" or text~"password" or text~"passwd"}' ,
        #查询语句,text表示查询文本内容,其他标签可以查看官网上的介绍
        #注:这里有一个坑,这儿的匹配不要写=而是要用~ 否则会出现匹配不到结果的情况
        'limit':'10',
        #返回条数
        'expand':"history.contributors",
        #expand包含的是额外的查询结果,history.contributors指的是文档的创始人
        'next':next
        #confluence需要通过next来实现下一页的查询功能 因此我们需要提交这个参数
        }
        response = requests.request(
        "GET",
        url,
        headers=headers,
        params=query
        )
    else :
        response =requests.request("GET","url"+next)
        #这里的url需要替换成自己的confluence地址
        #实际上next包含了初次查询需要构成的所有参数,因此在查询第二页内容的时候已经不需要构造初始查询的参数了
    response_content = json.loads(response.text)
    next = response_content["_links"]['next']
    #print(next)
    result = response_content['results']
    deal_data(result)
    return None if next == "" else  next


#将爬取的结果写入excel
def deal_data(result):
    workbook=openpyxl.load_workbook("C:\\Users\\Administrator\\Desktop\\check_data.xlsx")
    sheet=workbook['Sheet1']
    global loop
    for re in result:
        story = re['_expandable']['space']  #文章所有空间
        type = re['type']  #文章类型
        title = re['title']  #文章标题
        webui ="url"+re["_links"]['webui'] #对应的网页链接地址,url需要替换成自己的confluence地址
        #print(re['history']['createdBy'])
        if re['history']['createdBy']['type'] == 'known':
            user = re['history']['createdBy']['username']
        else :
            user = "Anonymous"
        #user对应文章的创建者
        #这里有一个小坑,如果是匿名用户创建的文章,就不存在username这个字段,因此需要进行一次判断
        #正常运维的话建议关闭匿名用户的功能
        sheet.cell(row=loop,column=1).value=story
        sheet.cell(row=loop,column=2).value=type
        sheet.cell(row=loop,column=4).value=webui
        sheet.cell(row=loop,column=3).value=user
        loop=loop+1
    workbook.save("C:\\Users\\Administrator\\Desktop\\check_data.xlsx")    

#循环读取数据
#注:本程序查询完成后会异常结束,但是不影响结果,懒得改了,凑合着用把
while next != None:
    next = search(next)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/126189
推荐阅读
相关标签
  

闽ICP备14008679号