Получение содержимого страницы из Confluence REST с помощью Python и PandasPython

Программы на Python
Ответить
Anonymous
 Получение содержимого страницы из Confluence REST с помощью Python и Pandas

Сообщение Anonymous »

Я хочу посчитать статистику слов на страницах моей базы знаний, работающей на Confluence.

Но прежде чем приступить к расчетам, я хотел бы получить данные страницы : текст, написанный на страницах.

У меня есть скрипт Python, который изначально был создан для сбора комментариев со страниц.
Я пытаюсь адаптировать скрипт для /rest/api/content/{ id} REST API, который я нашел с помощью REST-браузера Confluence.

Исходный скрипт использует API, который возвращает результат в виде объекта JSON, который при анализе с помощью метода json() возвращает словарь. объекты.

Однако API /rest/api/content/{id} возвращает результат, который не содержит правильно сформированного словаря. Я получаю строковые объекты и не могу просто обращаться к ним как array['index'] = result ['value'] для получения данных страницы.

Я использую среду JupyterLab для запуска кода.

При использовании браузера Confluecne и API /rest/api/content/{id} для страницы 4068365 Confluence возвращает следующий результат:

Код: Выделить всё

{
"id": "4068365",
"type": "page",
"status": "current",
"title": "Page title",
"body": {
"view": {
"value": "
Some text
",
"representation": "storage",
"_expandable": {
"webresource": "",
"content": "/rest/api/content/4068365"
}
},
"_expandable": {
"editor": "",
"export_view": "",
"styled_view": "",
"storage": "",
"anonymous_export_view": ""
}
},
"extensions": {
"position": "none"
},

...
Я хотел бы получить значение ключа value. Однако параметр «значение» не распознается как ключ, поскольку результат форматируется как строка, а не как словарь.

Вот код, который у меня есть.

Вот код. p>

Код: Выделить всё

import requests
import json
import getpass
import re
import html
import pandas as pd
from datetime import datetime

# Allow HTTPS connections with self-signed cert
requests.packages.urllib3.disable_warnings()

# Create login session for Confluence
auth = ('mylogin', getpass.getpass())
s = requests.Session()
s.auth = auth
s.verify = False
s.headers = {"Content-Type": "application/json"}

# Confluence REST API URI
WIKI = 'https://example.net/wiki/rest/api/'

# Obtain text from Confluence HTML layout
def cleanhtml(raw_html):
cleanr = re.compile('')
text = html.unescape(raw_html)
text = re.sub(cleanr, '', text)
text = text.replace(u'\xa0', u' ')
return text

# Retrieving page data
def get_data(page_id):
data = []
r = s.get(
'{}content/{}'.format(WIKI, page_id),
params = dict(
expand='body.view'
)
)
for content in r.json():
pgdata = dict()
#I can't address to value as content['value']
pgdata['text'] = cleanhtml(content['body']['view'].get('value'))
data.append(pgdata)
return data

# Pages to extract from
with open(r'C:\\Users\\Stacy\\Documents\\pages.txt') as pagesf:
pagesl = pagesf.read()
pages = pagesl.split(",\n")
print(pages)

# Preparing data frame and exporting to Excel
textdata = list()
for page in pages:
print('Handing:', page)
textdata.extend(get_data(page))

df = pd.DataFrame(
textdata,
columns = ['text']
)

df.to_excel('page_data{}.xlsx'.format(datetime.now().strftime("%Y_%m_%d_%H-%M")))

Я хочу собрать текст из

Код: Выделить всё

 "value": "
Some text
",
в данные и сохраните все это в словаре. Однако я вижу, что содержимое содержит тип данных, а не данные, поэтому я не могу ссылаться на «тело» как на ключ, поскольку это не ключ.

Пожалуйста, помогите мне получить данные страницы из значения. Каким будет правильный путь? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/562 ... and-pandas
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»